2015-04-23 61 views
4

我試圖使用打開( 「/ tmp目錄」,O_RDWR O_TMPFILE,0)與權限被拒絕

fd = open("/tmp", O_RDWR | O_TMPFILE, 0); 
if (fd == -1) { 
    perror("open()"); 
    exit(1); 
} 

打開一個臨時文件和我正在失敗。

我在/ tmp目錄權限:

drwxrwxrwt 13 root root 1.2K Apr 23 13:55 /tmp/ 

,我相信我的內核是新的足夠O_TMPFILE:

Linux frosties 3.14-1-amd64 #1 SMP Debian 3.14.2-1 (2014-04-28) x86_64 GNU/Linux 

我缺少什麼?

+2

O_TMPFILE獲取目錄路徑。創建文件沒有名稱。使用「/tmp/tmpfile.txt」導致「沒有這樣的文件或目錄」,因爲它不存在。 –

+1

並非所有的文件系統都支持O_TMPFILE標誌。你在/ tmp下掛載了哪一個? – kofemann

+0

@naltipar請仔細閱讀問題中的ls輸出。 –

回答

2

呼叫失敗,因爲您指定了模式0,這意味着沒有權限。有關Linux內核的這種行爲的討論,請參見this LWN article,以及明顯的錯誤修復。

+0

「在x86-64機器上打開()的情況下,事情確實如此幸運:當glibc調用內核時,mode參數恰好位於正確的寄存器中。」 - 嘆氣。 –

相關問題