2009-08-27 65 views
6

在我的C程序如下行应该提供的所有/组/用户读取和写入权限mkfifo文件权限没有被正确执行

mkfifo("/tmp/dumbPipe", 0666) 

但是,一旦我执行的代码,并检查了写入的权限非位被设置,我结束了

prw-r--r-- 

业主是一样的,这是一个问题,因为我在tmp目录中创建管道?当我从cmd行运行chmod 666时,所有权限都可以正确设置。

回答

9

这是一个没有意见后,只是引述手册。 Brievity等从人3 mkfifo

引用:

它是由过程的umask以通常的方式修改:所创建的文件的权限是(模式&〜umask的)。

从人2的umask报价

的进程的umask典型的默认值是S_IWGRP | S_IWOTH(八进制022)。在作为模式参数 打开指定(2)通常情况下:

 S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH 

    (octal 0666) when creating a new file, the permissions on the resulting file will be: 

     S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH 

    (because 0666 & ~022 = 0644; i.e., rw-r--r--). 
0

萨拉姆, 我知道这是晚,但对于其他用户,我选择写此评论 即使你精确0666作为许可,您应该知道,有一个是被称为“进程的文件模式创建”的另一个因素,所以问题是:

如何改变当前的进程文件模式创建?

答:在你的程序的开头使用的umask(许可) - 并给予0000许可

http://www.cyberciti.biz/tips/understanding-linux-unix-umask-value-usage.html

这应该帮助。