在C程序中操纵"粘性位"

Lip*_*eka 8 c linux

我们如何在C程序中设置,重置和检查"粘滞位"?

谢谢

Vin*_*ura 10

要阅读粘滞位使用stat()检查.st_modeS_ISVTX

#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>

struct stat file_stats;
stat("my_file", &file_stats);
if (file_stats.st_mode & S_ISVTX)
    printf("sticky\n");
Run Code Online (Sandbox Code Playgroud)

重置它,你通过 chmod

struct stat file_stats;
stat("my_file", &file_stats);
mode_t new_mode = file_stats.st_mode & ~S_ISVTX;
chmod("my_file", new_mode);
Run Code Online (Sandbox Code Playgroud)

设置它,chmod它是

struct stat file_stats;
stat("my_file", &file_stats);
mode_t new_mode = file_stats.st_mode | S_ISVTX;
chmod("my_file", new_mode);
Run Code Online (Sandbox Code Playgroud)

此代码未经测试.

手册页:stat(2) chmod(2)

  • 如果你没注意的话,我先读点.所以我猜测,如果它是一个目录,"文件类型"位显然不会被设置,除非操作系统试图对我恶作剧.显然,这不是生产代码,他必须检查chmod的返回值,因为最明显的错误是他没有权限更改文件的权限.他还应该添加以下函数:int is_computer_powered_on(){return 1; ,只是为了确保计算机在stat()和chmod()之间打开. (2认同)
  • 不,你的答案非常好(我已经赞成了).我今晚只是感到强迫症; 在这些评论中说出来就足够了:-) (2认同)