如果文件未以sudo身份打开,则系统调用打开C无法打印文件内容

时间:2017-11-16 13:47:47

标签: c file operating-system root system-calls

所以我创建了一个新文件:

 fd = open("tester.txt", O_CREAT | O_RDWR);

然后使用系统调用写入我添加一些信息。但是当我尝试从文件中读取信息时,它无法制作。使用终端我发现,打开文件的唯一方法是使用 sudo 并成功编写内容。但是,我的程序不能成为root用户。那么,如何打开文件,向其中写入一些内容并且不关闭C程序输出文件。

2 个答案:

答案 0 :(得分:6)

您缺少将文件模式指定为创建打开调用的第三个参数;尝试以下方法:

fd = open("tester.txt", O_CREAT | O_RDWR, 0644);

然后,应该使用模式-rw-r--r--创建文件,以便您自己的用户可以打开它进行读写。否则,它可能会以一些随机权限结束,即---------,并且只有root可以打开它进行读取(至少不进行chmodding)。

答案 1 :(得分:3)

无论何时在open()系统调用中使用O_CREAT标志,都应明确提供权限。 open()的手册页

int open(const char *pathname, int flags, mode_t mode);

模式指定在创建新文件时使用的权限。当在flags中指定 O_CREAT 时,必须提供此参数;如果未指定O_CREAT,则模式忽略

因此将上面的行修改为

  fd = open("tester.txt", O_CREAT | O_RDWR, 0664 ); 

我希望它能清除你的怀疑。