是否有一种简单的方法来分叉文件描述符?

时间:2017-12-24 20:50:15

标签: linux posix freebsd file-descriptor openbsd

我刚刚阅读了一些手册页:dup,dup2,fcntl,pread / pwrite,mmap等。

目前我正在使用mmap,但它并不是世界上最好的东西,因为我必须自己管理文件偏移量和缓冲区长度,基本上是在用户空间重新实现读/写。

从我收集到的内容:

  1. dup,dup2,fcntl只为fds创建别名,因此它们的偏移和标志是共享的 - 从一个读取可以提高其他偏移量。
  2. pread / pwrite可能是错误的并且会产生不一致的结果。
  3. mmap在Linux上有一些不常见的标志,但是我不需要它们。
  4. 我是否遗漏了某些东西或者mmap真的要走了?

    (注意重新open()文件在POSIX上是危险的 - 与Windows不同,POSIX不保证在文件打开时没有移动/删除的路径。在POSIX上,你可以打开一个路径,移动文件,仍然从中读取。有时甚至可以删除文件。我也找不到任何可以打开inode的文件。)

    至少对于最常见的POSIX变体,我想要答案,如果没有人回答这些变种。

1 个答案:

答案 0 :(得分:2)

在Linux上,打开/proc/self/fd/$NUM无论文件是否仍然与第一次打开时的名称相同,都会有效,并且会生成一个新的打开文件描述(即具有独立偏移的新fd和标志)。

我不知道任何POSIXly便携式的方式。

(我也不知道你对pread / pwrite的错误是什么意思......)