一尘不染

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

linux

我正在Linux C项目上工作,无法使用文件描述符。

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

伪代码:

//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???----

提前致谢!-安德鲁


阅读 260

收藏
2020-06-07

共1个答案

一尘不染

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

2020-06-07