Mik*_*ike 3 c file-permissions file
在我的代码中,我有以下片段:
char* filename="/something.txt";
umask(0);
int filehandle=open(filename,O_WRONLY|O_CREAT|0x777);
close(filehandle);
Run Code Online (Sandbox Code Playgroud)
执行它时,即使我完全按照文档操作,也会创建文件,但权限设置不正确.
文件说明:
参数模式指定在创建新文件时使用的权限.它以通常的方式由进程的umask修改:创建的文件的权限是(mode&~umask).
对于模式,我指定了0x777,这意味着读,写和执行.对于umask,我指定为零,因此0x777 & ~0应该导致777.
实际结果的权限是670.
为什么这样,我该如何解决?
首先,它应该是八进制0777而不是十六进制0x777,等价是:
0x777 0111 0111 0111 011 101 110 111 r-xrw-rwx, plus other stuff(a)
0777 111 111 111 111 111 111 rwxrwxrwx
Run Code Online (Sandbox Code Playgroud)
其次,签名是:
int open(const char *pathname, int flags, mode_t mode);
Run Code Online (Sandbox Code Playgroud)
意思是模式是一个单独的参数,而不是你or带有标志的东西.
因此,您正在寻找的线路将是:
int filehandle = open (filename, O_WRONLY | O_CREAT, 0777);
Run Code Online (Sandbox Code Playgroud)
(a)我认为POSIX没有指定那些高位,但Linux会使用它们来表示文件是setgid和sticky(虽然不是原始意义上的粘性意义代码保持缓存在交换空间中 - Linux从未支持过,而是使用粘性位来限制谁可以对粘性目录中的文件执行某些操作.
| 归档时间: |
|
| 查看次数: |
4287 次 |
| 最近记录: |