2011-06-03 141 views
7

抱歉没有做我自己的研究并在此处询问。我时间稍短。主题和文件描述符

是否有可能有两个或多个线程从单个线程spwaned文件描述符表。两个或多个子线程正在同时访问同一个文件,对于来自不同线程的同一文件的两个不同打开的偏移量,线程特定的?

感谢

回答

3

文件描述符在线程之间共享。如果你想要“线程专用”偏移量,为什么不让每个线程使用不同的文件描述符(多次)(open(2))?

+0

'dup()'怎么样? – trojanfoe 2011-06-03 06:59:48

+1

@trojanfoe不,'dup'和'dup2'不会这样(他想要“线程特定的”偏移量)。 – cnicutar 2011-06-03 07:05:50

+0

dup()仅复制文件描述符而不是表示打开文件的内核结构 – 2011-06-03 07:49:23

10

没有,是每个进程只有一个文件描述符表,它的所有线程之间共享。

从您的问题描述中,您可能需要查看pread()和pwrite()函数。

+0

+1不仅包括答案,还包括解决方案“pread”和“pwrite”。 – 2011-06-03 12:24:49

0

在Linux中,您可以通过CLONE_FILES标记unshare()文件描述符表,但我会建议不要这样做。

+0

请注意,这对“共享偏移”问题没有帮助。即使两个线程不再共享其fd表(即使它们是独立的fd表开始的独立进程),引用同一个“打开文件描述”的两个文件描述符也总是共享偏移量。 – 2012-08-03 02:07:55

0

尝试pread()/ pwrite()。

您仍然可以在多个线程之间共享相同的文件描述符,即,使用pread()/ pwrite()对同一文件的并行读取/写入保证为原子,因为您需要指定偏移量和字节数读/写分别。