当前位置: 首页 > 面试题库 >

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

毛声
2023-03-14
问题内容

我正在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。该功能可以在读/写模式下正确打开文件
并取消链接 。最重要的是,它避免了命名和创建文件时的竞争条件,从而避免了临时文件创建过程中的漏洞。



 类似资料:
  • 问题内容: 我试图在bash中使用读/写文件描述符,以便可以删除文件描述符之后引用的文件,例如: 但是该命令没有输出。如果我使用单独的文件描述符进行读写,则可以实现我想要的: 打印。 我怀疑当您从写入切换到读取时,bash不会自动寻求文件描述符的开始,并且以下bash和python代码的组合证实了这一点: fdrw.sh fdrw.py 这使: 有没有一种方法可以仅使用bash来实现我想要的功能?

  • 文件描述符 Linux很重要的设计思想就是一切皆文件,网络是文件,键盘等外设也是文件,很神奇吧?于是所有资源都有了统一的接口,开发者可以像写文件那样通过网络传输数据,我们也可以通过/proc/的文件看到进程的资源使用情况。 内核给每个访问的文件分配了文件描述符(File Descriptor),它本质是一个非负整数,在打开或新建文件时返回,以后读写文件都要通过这个文件描述符了。 应用 我们想想操作

  • 文件描述符接口 函数 int  fd_new (void)   分配文件描述符   struct dfs_fd *  fd_get (int fd)   获取文件描述结构   void  fd_put (struct dfs_fd *fd)   放置文件描述符   int  fd_is_open (const char *pathname)   判断文件是否已被打开   int  select (

  • 问题内容: 我想从运行Ubuntu的Amazon EC2上安装的Java Servlet 创建一个文件夹,并在创建的文件夹的卷中写入文件。 我已将EBS卷安装在 但是Servlet无法创建文件夹并写入文件吗? 我的问题 为什么Java sevlet无法在Amazon EBS挂载的卷上创建文件夹? 问题答案: 看起来您的文件夹没有正确的读/写权限。 尝试授予所有用户对该目录的读写访问权限,例如: 如

  • 问题内容: 有没有办法在原始文件描述符而不是FILE *上执行ftell()的操作(返回文件中的当前位置)?我认为应该有,因为您可以使用lseek()查找原始文件描述符。 我知道我可以使用fdopen()创建与文件描述符相对应的FILE *,但我宁愿不这样做。 问题答案: 只需使用:

  • 当使用了大量虚拟主机,而且每个主机又使用了不同的日志文件时,Apache可能会遭遇文件描述符(有时也称为文件句柄)耗尽的困境。Apache使用的文件描述符总数如下:每个不同的错误日志文件一个、每个其他日志文件指令一个、再加10-20个作为内部使用。Unix操作系统限制了每个进程可以使用的文件描述符数量。典型上限是64个,但可以进行扩充,直至到达一个很大的硬件限制为止(hard-limit)。 尽管