所以我创建了一个新文件:
fd = open("tester.txt", O_CREAT | O_RDWR);
然后使用系统调用写入我添加一些信息。但是当我尝试从文件中读取信息时,它无法制作。使用终端我发现,打开文件的唯一方法是使用 sudo 并成功编写内容。但是,我的程序不能成为root用户。那么,如何打开文件,向其中写入一些内容并且不关闭C程序输出文件。
答案 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 );
我希望它能清除你的怀疑。