如果文件未以 sudo 打开,则系统调用 open C 无法打印文件内容
System call open C can't print file content if the file is not opened as sudo
所以我创建了一个新文件:
fd = open("tester.txt", O_CREAT | O_RDWR);
然后使用系统调用 write 我向其中添加了一些信息。但是当我尝试从文件中读取信息时,它无法生成。使用 terminal 我发现,打开文件的唯一方法是使用 sudo 并且 content 已成功写入。但是,我的程序不能是 root。那么,如何打开文件,向其中写入一些内容,而不关闭 C 程序输出文件。
您没有将文件模式指定为创建打开调用的第三个参数;尝试以下操作:
fd = open("tester.txt", O_CREAT | O_RDWR, 0644);
然后,文件应该以 -rw-r--r--
模式创建,以便您自己的用户可以打开它进行读写。否则,它可能会以一些随机权限结束,即 ---------
,并且只有 root 可以打开它进行阅读(至少不需要修改它)。
无论何时在 open() 系统调用中使用 O_CREAT 标志,您都应该明确提供权限。 open() 的手册页说
int open(const char *pathname, int flags, mode_t mode);
mode 指定在创建新文件时使用的权限。当在 flags 中指定 O_CREAT 时必须提供此参数;如果未指定 O_CREAT,则模式为 ignored.
所以将上面一行修改为
fd = open("tester.txt", O_CREAT | O_RDWR, 0664 );
希望能解开你的疑惑
所以我创建了一个新文件:
fd = open("tester.txt", O_CREAT | O_RDWR);
然后使用系统调用 write 我向其中添加了一些信息。但是当我尝试从文件中读取信息时,它无法生成。使用 terminal 我发现,打开文件的唯一方法是使用 sudo 并且 content 已成功写入。但是,我的程序不能是 root。那么,如何打开文件,向其中写入一些内容,而不关闭 C 程序输出文件。
您没有将文件模式指定为创建打开调用的第三个参数;尝试以下操作:
fd = open("tester.txt", O_CREAT | O_RDWR, 0644);
然后,文件应该以 -rw-r--r--
模式创建,以便您自己的用户可以打开它进行读写。否则,它可能会以一些随机权限结束,即 ---------
,并且只有 root 可以打开它进行阅读(至少不需要修改它)。
无论何时在 open() 系统调用中使用 O_CREAT 标志,您都应该明确提供权限。 open() 的手册页说
int open(const char *pathname, int flags, mode_t mode);
mode 指定在创建新文件时使用的权限。当在 flags 中指定 O_CREAT 时必须提供此参数;如果未指定 O_CREAT,则模式为 ignored.
所以将上面一行修改为
fd = open("tester.txt", O_CREAT | O_RDWR, 0664 );
希望能解开你的疑惑