我正在处理一个Linux C项目,但在使用文件描述符时遇到了麻烦。
我有一个孤立的文件描述符(该文件已经通过open()打开,然后unlink()删除,但fd仍然有效),它只具有写权限。原始支持文件具有完整权限(使用S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH创建),但可惜的是该文件被使用O_WRONLY打开。是否可以复制文件描述符并将副本更改为O_RDWR?
伪代码:
感谢您的提前帮助! - Andrew
我有一个孤立的文件描述符(该文件已经通过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???----
感谢您的提前帮助! - Andrew
freopen
是如何实现的呢?它只是失败了吗?(允许失败。) - R.. GitHub STOP HELPING ICEEBADF
。如果想要不允许它的原因,请想象将stdin
更改为允许写入,将stdout
更改为允许读取-毫无意义。 - jweyrich/proc/self/fd/n
来实现此操作。请参考此stackoverflow答案获取源代码。 - andrewdotn