gpt4 book ai didi

c - 为什么 open() 创建的文件权限与 touch 不同?

转载 作者:太空狗 更新时间:2023-10-29 11:30:00 26 4
gpt4 key购买 nike

#include<apue.h>
#include<unistd.h>
#include<fcntl.h>
#include<string.h>

int main(int argc , char *argv[])
{
int fd = open("test.txt",O_WRONLY | O_CREAT | O_TRUNC);
int pid,status;
const char *str_for_parent = "str_for_parent\n";
const char *str_for_child = "str_for_child\n";
if ((pid = fork()) < 0)
err_sys("fork error");
else if (pid == 0)
{
write(fd,str_for_child,strlen(str_for_child)+1);
_exit(0);
}
wait(&status);
write(fd,str_for_parent,strlen(str_for_parent)+1);

return 0;
}

test.txt是由open()创建的。但是它的权限(--------x)与那些文件不同(-rw-rw-r--) 由 touch 或我系统中的任何其他软件创建。我的 umask0002

最佳答案

open 实际上需要一个(可选的)第三个参数:

int open(const char *pathname, int flags, mode_t mode);

新文件的模式设置为 mode 的 AND 和 umask 的倒数(即 mode & ~umask ).由于您没有传递 mode,它被初始化为一些垃圾,结果您得到了错误的模式。

通常,如果您要传递 O_CREAT,您应该传递 0666mode,除非您有某些特定原因需要使用其他一些模式(例如,无论 umask 设置成什么,您都想确保其他用户无法读取该文件)。

关于c - 为什么 open() 创建的文件权限与 touch 不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12721512/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com