C 文件描述符复制而不共享偏移量或标志

标签 c linux windows file descriptor

我需要使用 C 从不同偏移量的文件中并发读取。 dup 不幸地创建了一个与原始文件共享偏移量和标志的文件描述符。

是否有像dup这样不共享偏移量和标志的函数?

EDIT 我只能访问文件指针 FILE* fp; 我没有文件路径

编辑 除了 mac 和许多 linux 版本之外,该程序还为 windows 编译

解决方案 我们可以在 posix 系统上使用 pread,我为 windows 写了一个 pread 函数来解决这个问题 https://github.com/Storj/libstorj/blob/master/src/utils.c#L227

最佳答案

在 Linux 上,您可以从 /proc/self/fd/N 中恢复文件名,其中 N 是文件描述符的整数值:

sprintf( linkname, "/proc/self/fd/%d", fd );

然后在生成的链接名称上使用 readlink()

如果文件已被重命名或删除,您可能就不走运了。

但是为什么您需要另一个文件描述符?您可以在原始文件描述符上使用 pread() 和/或 pwrite() 来读取/写入文件而不影响当前偏移量。 (警告:在 Linux 上,pwrite() 到以追加模式打开的文件是错误的 - POSIX 规定 pwrite() 到以追加模式打开的文件将写入pwrite() 调用中指定的偏移量,但 Linux pwrite() 实现已损坏,将忽略偏移量并将数据附加到文件末尾 - see the BUGS section of the Linux man page)

关于C 文件描述符复制而不共享偏移量或标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42425963/

相关文章:

c - 如何使用 mount(2) 挂载镜像

windows - Emacs 无法启动服务器

c# - 在 Windows 10 中,显示名称不会出现在大图标/磁贴下方

java - 在 Windows 上查找本地连接的默认网关

c - gcc 不会编译 SDL C 程序(对 SDL 函数的 undefined reference )

python - 使用 python subprocess.call 将 fasta 序列的计数写入文件

c - 无法使用 dlsym 获取统计数据

iphone - ios - iPhone : How to create animation UItableviewcell when edit like native ios alarm clock app

c - 为什么我的排序代码在 c 中不起作用?

c - 任何了解网络并将其用于编程的快速指南?