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

时间:2011-01-09 03:29:15

标签: c linux unlink dup

我正在开发一个Linux C项目,我在使用文件描述符方面遇到了麻烦。

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

psudo-code:


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

提前致谢! -Andrew

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:-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