更改文件描述符的读/写权限

And*_*fas 11 c linux unlink dup

我正在研究一个Linux C项目,我在使用文件描述符时遇到了麻烦.

我有一个孤立文件描述符(文件是open()'然后取消链接()'但fd仍然很好)具有只写权限.原始后备文件具有完全权限(使用S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH创建),但是文件是使用O_WRONLY打开的.是否可以复制文件描述符并将副本更改为O_RDWR?

psudo代码:


//open orphan file
int fd = open(fname, O_WRONLY, ...)
unlink(fname)
//fd is still good, but I can't read from it

//...

//I want to be able to read from orphan file
int fd2 = dup(fd)
//----change fd2 to read/write???----

Run Code Online (Sandbox Code Playgroud)

提前致谢!-安德鲁

Mic*_*yan 6

不,没有POSIX功能来改变打开模式.您需要以读/写模式打开它.但是,由于您创建了一个临时文件,我强烈建议您使用mkstemp.该函数在读/写模式下正确打开文件并取消链接.最重要的是,它避免了命名和创建文件时的竞争条件,从而避免了创建临时文件时的漏洞.

  • mkstemp没有取消联系AFAIK? (2认同)