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