Help with st_mode in sys/stat.h

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Deniz Dogan

    Help with st_mode in sys/stat.h

    Hello.

    I have a question regarding the st_mode field of the "stat" struct in
    sys/stat.h. I'd like to know how to use the S_IRWXU, S_IRWXG and
    S_IRWXO flags to mask the mode_t value into human readable form such
    as 755, 644, etc. Currently I do something similar to this:

    usr_t = (mod & S_IRWXU);

    usr_r = (mod & S_IRUSR);
    usr_w = (mod & S_IWUSR);
    usr_x = (mod & S_IXUSR);

    However, this does not produce the required result. Any help is
    appreciated.

    /Deniz Dogan
  • Spiros Bousbouras

    #2
    Re: Help with st_mode in sys/stat.h

    On 11 May, 12:05, Deniz Dogan <kristn...@gmai l.comwrote:
    Hello.
    >
    I have a question regarding the st_mode field of the "stat" struct in
    sys/stat.h. I'd like to know how to use the S_IRWXU, S_IRWXG and
    S_IRWXO flags to mask the mode_t value into human readable form such
    as 755, 644, etc. Currently I do something similar to this:
    >
    usr_t = (mod & S_IRWXU);
    >
    usr_r = (mod & S_IRUSR);
    usr_w = (mod & S_IWUSR);
    usr_x = (mod & S_IXUSR);
    >
    However, this does not produce the required result. Any help is
    appreciated.
    We only deal with standard C here. For this sort of
    question you should go to comp.unix.progr ammer

    Comment

    • Jens Thoms Toerring

      #3
      Re: Help with st_mode in sys/stat.h

      Deniz Dogan <kristnjov@gmai l.comwrote:
      I have a question regarding the st_mode field of the "stat" struct in
      sys/stat.h.
      I guess you're not aware that this isn't really a question about
      C but looks more like one about POSIX, so comp.unix.progr ammer
      would be more appropriate to ask in.
      I'd like to know how to use the S_IRWXU, S_IRWXG and
      S_IRWXO flags to mask the mode_t value into human readable form such
      as 755, 644, etc. Currently I do something similar to this:
      usr_t = (mod & S_IRWXU);
      usr_r = (mod & S_IRUSR);
      usr_w = (mod & S_IWUSR);
      usr_x = (mod & S_IXUSR);
      However, this does not produce the required result. Any help is
      appreciated.
      What about something like

      mode = ( ( ( stat.st_mode & S_IRUSR ) ? 1 : 0 ) << 8 )
      | ( ( ( stat.st_mode & S_IWUSR ) ? 1 : 0 ) << 7 )
      | ( ( ( stat.st_mode & S_IXUSR ) ? 1 : 0 ) << 6 )
      | ( ( ( stat.st_mode & S_IRGRP ) ? 1 : 0 ) << 5 )
      | ( ( ( stat.st_mode & S_IWGRP ) ? 1 : 0 ) << 4 )
      | ( ( ( stat.st_mode & S_IXGRP ) ? 1 : 0 ) << 3 )
      | ( ( ( stat.st_mode & S_IROTH ) ? 1 : 0 ) << 2 )
      | ( ( ( stat.st_mode & S_IWOTH ) ? 1 : 0 ) << 1 )
      | ( ( ( stat.st_mode & S_IXOTH ) ? 1 : 0 ) << 0 );

      and then printing the result as an octal number?

      Regards, Jens
      --
      \ Jens Thoms Toerring ___ jt@toerring.de
      \______________ ____________ http://toerring.de

      Comment

      • vippstar@gmail.com

        #4
        Re: Help with st_mode in sys/stat.h

        On May 11, 2:05 pm, Deniz Dogan <kristn...@gmai l.comwrote:
        Hello.
        >
        I have a question regarding the st_mode field of the "stat" struct in
        sys/stat.h. I'd like to know how to use the S_IRWXU, S_IRWXG and
        S_IRWXO flags to mask the mode_t value into human readable form such
        as 755, 644, etc. Currently I do something similar to this:
        >
        usr_t = (mod & S_IRWXU);
        >
        usr_r = (mod & S_IRUSR);
        usr_w = (mod & S_IWUSR);
        usr_x = (mod & S_IXUSR);
        >
        However, this does not produce the required result. Any help is
        appreciated.
        Off-topic for this newsgroup, comp.unix.progr ammer would be more
        appropriate, but you can certainly cast mode_t to (unsigned long) and
        use sprintf and %lo.

        Comment

        Working...