470,866 Members | 1,945 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 470,866 developers. It's quick & easy.

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
Jun 27 '08 #1
3 6622
On 11 May, 12:05, Deniz Dogan <kristn...@gmail.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.programmer

Jun 27 '08 #2
Deniz Dogan <kr*******@gmail.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.programmer
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
Jun 27 '08 #3
On May 11, 2:05 pm, Deniz Dogan <kristn...@gmail.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.programmer would be more
appropriate, but you can certainly cast mode_t to (unsigned long) and
use sprintf and %lo.
Jun 27 '08 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

3 posts views Thread by Spartan815 | last post: by
2 posts views Thread by electric sheep | last post: by
1 post views Thread by John | last post: by
1 post views Thread by a | last post: by
4 posts views Thread by thoseion | last post: by
15 posts views Thread by timothytoe | last post: by
1 post views Thread by Vp | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.