如何使用C在Linux中创建一个文件?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (189)

我想在Linux(Ubuntu)上用C语言创建一个只写文件。这是我的代码:

 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*
提问于
用户回答回答于

open()时当你指定O_CREAT时,你需要三个参数的形式。当你省略第三个参数时,open()使用第三个参数所期望的栈上的任何值; 这很少是一个连贯的权限集合(在你的例子中,看起来十进制12 =八进制014在堆栈中)。

第三个参数是文件的权限 - 将由该umask()值修改。

int fd2 = open("/tmp/test.svg", O_RDWR | O_CREAT, S_IRUSR | S_IRGRP | S_IROTH);

请注意,你可以创建一个没有写入权限的文件(对其他人或任何其他进程),同时仍然可以从当前进程写入文件。除非你正在编写一个编译器(而“.svg”文件通常不是可执行文件!),否则很少需要在程序创建的文件上使用执行位。

S_xxxx标志来自<sys/stat.h><fcntl.h>- 你可以使用任何头来获取信息(但open()它本身被声明<fcntl.h>)。

请注意,固定的文件名称和缺乏保护性选项,例如O_EXCL使修改后的open()调用有些不安全。

用户回答回答于

授予访问权限作为第三个参数:

int fd2 = open("/tmp/test.svg", O_RDWR|O_CREAT, 0777);  // Originally 777 (see comments)

if (fd2 != -1) {
    // use file descriptor
    close(fd2);
}

通过这样做,所有的读,写和执行权限将被赋予给用户,组和其他人。根据你的使用修改第三个参数。

扫码关注云+社区

领取腾讯云代金券