首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用C++在Linux中创建文件

使用C++在Linux中创建文件
EN

Stack Overflow用户
提问于 2010-03-07 15:11:03
回答 2查看 71.7K关注 0票数 22

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

代码语言:javascript
复制
 int fd2 = open ("/tmp/test.svg", O_RDWR|O_CREAT);

 if (fd2 != -1) {
   //....
 }

但是为什么我创建的文件有'xr‘模式呢?如何创建它,以便我可以在命令提示符下自己打开它?

代码语言:javascript
复制
------xr--  1 michael michael  55788 2010-03-06 21:57 test.txt*
------xr--  1 michael michael   9703 2010-03-06 22:41 test.svg*
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-07 15:13:30

当您指定O_CREAT时,您需要open()的三参数形式。当您省略第三个参数时,open()将使用堆栈中需要第三个参数的任何值;这很少是一组连贯的权限(在您的示例中,十进制12 =八进制014在堆栈上)。

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

代码语言:javascript
复制
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()调用也有些不安全。

票数 35
EN

Stack Overflow用户

发布于 2013-02-02 16:51:46

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

代码语言:javascript
复制
int fd2 = open("/tmp/test.svg", O_RDWR|O_CREAT, 0777);  // Originally 777 (see comments)

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2395465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档