我正在研究Linux C项目,并且在使用文件描述符方面遇到了麻烦。

我有一个孤儿文件描述符(该文件打开()'d then unink()d,但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???----

提前致谢! -安德鲁

有帮助吗?

解决方案

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

其他提示

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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top