我正在尝试用Linux上的C语言(Ubuntu)创建一个只写文件。这是我的代码:
int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT);
if (fd2 != -1) {
//....
}
但是为什么我创建的文件有'xr‘模式呢?如何创建它,以便我可以在命令提示符下自己打开它?
------xr-- 1 michael michael 55788 2010-03-06 21:57 test.txt*
------xr-- 1 michael michael 9703 2010-03-06 22:41 test.svg*
发布于 2010-03-07 07:13:30
当您指定O_CREAT时,您需要open()
的三参数形式。当您省略第三个参数时,open()
将使用堆栈中需要第三个参数的任何值;这很少是一组连贯的权限(在您的示例中,十进制12 =八进制014在堆栈上)。
第三个参数是文件上的权限-它将由umask()
值修改。
int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
请注意,您可以在没有写权限的情况下创建文件(对其他任何人或任何其他进程),但仍然可以从当前进程写入该文件。很少需要在从程序创建的文件上使用执行位-除非您正在编写编译器(而'.svg‘文件通常不是可执行文件!)。
S_xxxx标志来自和 -您可以使用这两个头部中的任何一个来获取信息(但open()
本身是在<fcntl.h>
中声明的)。
请注意,固定的文件名和缺少保护选项(如O_EXCL
)使修改后的open()
调用也有些不安全。
发布于 2013-02-02 08:51:46
将访问权限作为第三个参数:
int fd2 = open("/tmp/test.svg", O_RDWR|O_CREAT, 0777); // Originally 777 (see comments)
if (fd2 != -1) {
// use file descriptor
close(fd2);
}
通过这样做,所有读、写和执行权限都将授予用户、组和其他人。根据您的使用修改第三个参数。
https://stackoverflow.com/questions/2395465
复制相似问题