我正在开发一个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
答案 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