2015-04-23 63 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参数恰好位于正确的寄存器中。” - 叹气。 –

相关问题