我试图在Linux(Ubuntu)上用C创建一个只写文件.这是我的代码:
int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT);
if (fd2 != -1) {
//....
}
Run Code Online (Sandbox Code Playgroud)
但为什么我创建的文件有'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*
Run Code Online (Sandbox Code Playgroud)
Jon*_*ler 35
open()指定O_CREAT时需要三参数形式.当你省略第三个参数时,open()使用恰好在预期第三个参数的堆栈上的任何值; 这很少是一组连贯的权限(在您的示例中,似乎十进制12 =八进制014在堆栈上).
第三个参数是文件的权限 - 将由umask()值修改.
int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);
Run Code Online (Sandbox Code Playgroud)
请注意,您可以创建一个没有写入权限的文件(对任何其他人或任何其他进程),同时仍然可以从当前进程写入该文件.很少需要对从程序创建的文件使用执行位 - 除非您正在编写编译器(并且'.svg'文件通常不是可执行文件!).
S_xxxx标志来自<sys/stat.h>和<fcntl.h>- 您可以使用任一标头来获取信息(但open()它本身是声明的<fcntl.h>).
请注意,固定文件名和缺少保护选项,如O_EXCL使修改后的open()调用有些不安全.
| 归档时间: |
|
| 查看次数: |
62335 次 |
| 最近记录: |