12

我正在开发一个 linux C 项目,但在使用文件描述符时遇到了问题。

我有一个具有只写权限的孤立文件描述符(文件是 open()'d 然后 unlink()'d 但 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???----

提前致谢!-安德鲁

4

2 回答 2

6

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

于 2011-01-09T03:38:23.050 回答
-1
int fd = open(fname, O_WRONLY, ...)
int fd_ro = open(fname, O_RDONLY, ...)
unlink(fname)
{ write to fd }
close (fd);
read or execute(!) fd_ro
于 2018-04-21T15:56:23.963 回答