Create an account

Very important

  • To access the important data of the forums, you must be active in each forum and especially in the leaks and database leaks section, send data and after sending the data and activity, data and important content will be opened and visible for you.
  • You will only see chat messages from people who are at or below your level.
  • More than 500,000 database leaks and millions of account leaks are waiting for you, so access and view with more activity.
  • Many important data are inactive and inaccessible for you, so open them with activity. (This will be done automatically)


Thread Rating:
  • 345 Vote(s) - 3.54 Average
  • 1
  • 2
  • 3
  • 4
  • 5
flags for st_mode of stat system call

#1
I'm trying to understand the flags for the st_mode field of the stat structure of that stat command, but I'm having such a hard time! I found this example [here][1], but I really don't understand this code fragment:


if ( mode & S_IRUSR ) str[1] = 'r'; /* 3 bits for user */
if ( mode & S_IWUSR ) str[2] = 'w';
if ( mode & S_IXUSR ) str[3] = 'x';

if ( mode & S_IRGRP ) str[4] = 'r'; /* 3 bits for group */
if ( mode & S_IWGRP ) str[5] = 'w';
if ( mode & S_IXGRP ) str[6] = 'x';

if ( mode & S_IROTH ) str[7] = 'r'; /* 3 bits for other */
if ( mode & S_IWOTH ) str[8] = 'w';
if ( mode & S_IXOTH ) str[9] = 'x';

I know that "&" is the bitwise AND operator, but nothing else. I don't even know what to ask.

PD: Sorry about the previous questions I asked. I don't know how to mark a question answered or anything like that :(

[1]:

[To see links please register here]

Reply

#2
mode is a [bitfield][1] which is a common way to pack data. Think of each bit in the field as being a toggle switch which can be set to off or on. To check if the toggle is on, you check to see if the appropriate bit has been set using the & operator. You can set bits using | and clear them using ~ [bitwise operations][2].


[1]:

[To see links please register here]

[2]:

[To see links please register here]

Reply

#3
Well, the [POSIX spec for `<sys/stat.h>`][1] enumerates everything you can learn from the st_mode field of `struct stat`.

Is your question "What can this field tell me", or is it "How do I extract the information", or both?


[1]:

[To see links please register here]

Reply

#4
It's common in operating system programing to use unsigned integers to hold a series of bits that describe something. In this case, mode has 9 bits of interest. One bit tells if the owner can read, one for owner write, one for owner execute, and similar bits for the group and others. The trick is in extracting whether a bit is set or not.

Here's an example. The S_IRUSR is a name for a bitmask that describes the "owner read" bit. It's defined in [the specs](

[To see links please register here]

) as 0400 (octal) which translates to 100000000 in binary. When you take the binary and of this value with the mask, you get the value 100000000 (binary) if the 9th bit of the mask is set. Otherwise you get 0.

The if-statement evaluates to true if the large value is returned, and false otherwise. This way if the bit is set, 'r' is written into the string into position 1. The same technique applies to all of the other bits as well.
Reply



Forum Jump:


Users browsing this thread:
1 Guest(s)

©0Day  2016 - 2023 | All Rights Reserved.  Made with    for the community. Connected through