系统调用openc can';如果文件未按sudo方式打开,则不打印文件内容
因此,我创建了一个新文件:系统调用openc can';如果文件未按sudo方式打开,则不打印文件内容,c,file,operating-system,root,system-calls,C,File,Operating System,Root,System Calls,因此,我创建了一个新文件: fd = open("tester.txt", O_CREAT | O_RDWR); 然后使用系统调用write向其中添加一些信息。但是,当我试图从文件中读取信息时,它无法生成。使用终端我发现,打开文件的唯一方法是使用sudo,并且内容被成功写入。但是,我的程序不能是root。那么,我如何打开文件,向其中写入一些内容,而不关闭C程序输出文件呢 无法将文件模式指定为创建打开调用的第三个参数;请尝试以下操作: fd = open("tester.txt", O_CRE
fd = open("tester.txt", O_CREAT | O_RDWR);
然后使用系统调用write向其中添加一些信息。但是,当我试图从文件中读取信息时,它无法生成。使用终端我发现,打开文件的唯一方法是使用sudo,并且内容被成功写入。但是,我的程序不能是root。那么,我如何打开文件,向其中写入一些内容,而不关闭C程序输出文件呢 无法将文件模式指定为创建打开调用的第三个参数;请尝试以下操作:
fd = open("tester.txt", O_CREAT | O_RDWR, 0644);
然后,应该使用模式
-rw-r--r--
创建文件,以便您自己的用户可以打开它进行读写。否则,它可能会得到一些随机权限,例如,-----------
,并且只有root用户可以打开它进行读取(至少不需要对其进行chmoded)。无论何时在open()系统调用中使用O_create flag,都应该显式提供该权限。open()的手册页显示
模式指定在创建新文件时使用的权限。当标志中指定了O_create时,必须提供此参数;如果未指定O_create,则忽略模式
因此,将上述行修改为
fd = open("tester.txt", O_CREAT | O_RDWR, 0664 );
我希望它能消除您的疑虑。您是如何发现需要使用sudo的?您具体发现了什么来得出这个结论?cat filename并没有打开文件,而是sudo cat filenamedoes@KarinaK因为首先您未经许可就对文件进行了装箱,现在使用rm命令手动删除了文件,然后再次执行程序,因此出现以下错误:tail:写入“标准输出”时出错:错误address@KarinaK现在,
tail
在哪里发挥作用?只是来自perror的文本,错误本身是错误地址这意味着OP没有包含open
的原型?@KarinaK我没有看到上面的perror(),也许你应该在更大的上下文中指定代码。谢谢,我会接受另一个答案,因为卡里姆是第一个。是的@KarinaK欢迎你,只晚了5分钟!!我刚下班回来
fd = open("tester.txt", O_CREAT | O_RDWR, 0664 );