标志位操作:
Linux内核、wine、XFree86的代码中都常常能见到一些这样的标志位操作。
现在从Linux内核中的do_mount()函数中那些例子来记一下:
1949 if (flags & MS_NOEXEC)
1950 mnt_flags |= MNT_NOEXEC;
1956 flags &= ~(MS_NOSUID | MS_NOEXEC | MS_NODEV | MS_ACTIVE |
1957 MS_NOATIME | MS_NODIRATIME | MS_RELATIME| MS_KERNMOUNT |
1958 MS_STRICTATIME);
flags & MS_NOEXEC表示:
假设flags是二进制1111,MS_NOEXEC定义为十进制8,那么二进制就是0100,那么&操作执行完后,flags就是0100,不等于0,所以这行语句就是检查flags有没有设置标志位MS_NOEXEC。
检查一个标志位。
mnt_flags |= MNT_NOEXEC表示:
这里的意思和上面差不多,进行或操作后,mnt_flags的MNT_NOEXEC标志位置位。
设置一个标志位。
flags &= ~MS_NOEXEC表示:
上述语句主要是说的是 &~操作做了什么,下面我们分析看看。
这里还是假设flags是二进制1111,MS_NOEXEC定义为十进制8,二进制是0100,
MS_NOEXE进行非“~”操作后,就是二进
C语言中标志位笔记
最新推荐文章于 2022-02-26 14:41:26 发布