簡體   English   中英

如果文件未以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);

然后使用系統調用寫我添加一些信息。 但是當我嘗試從文件中讀取信息時,無法進行。 使用我發現的終端 ,打開文件的唯一方法是使用sudo成功編寫內容 但是,我的程序不能是root。 那么,如何打開文件,向其中寫入一些內容並且不關閉C程序輸出文件。

您缺少將文件模式指定為創建打開調用的第三個參數; 嘗試以下方法:

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

然后,應該使用模式-rw-r--r--創建文件,這樣您自己的用戶就可以打開它進行讀寫。 否則,它可能會以一些隨機權限結束,即--------- ,並且只有root可以打開它進行讀取(至少不進行chmodding)。

無論何時在open()系統調用中使用O_CREAT標志,都應明確提供權限。 open()的手冊頁說

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

mode指定在創建新文件時使用的權限。 當在flags中指定O_CREAT時,必須提供此參數; 如果未指定O_CREAT,則忽略模式。

所以修改上面的行為

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM