Help with st_mode in sys/stat.h

D

Deniz Dogan

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
 
S

Spiros Bousbouras

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
 
J

Jens Thoms Toerring

Deniz Dogan said:
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
 
V

vippstar

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,573
Members
45,046
Latest member
Gavizuho

Latest Threads

Top