很抱歉没有做我自己的研究并在这里问。我的时间略短。
是否可以为单个线程中的两个或多个线程提供两个文件描述符表。两个或多个子线程同时访问同一个文件,因此来自不同线程的同一文件的两个不同打开的偏移量是否是特定于线程的?
由于
答案 0 :(得分:11)
不,每个进程只有一个文件描述符表,并且它在所有线程之间共享。
从您的问题描述中,您可能需要查看pread()和pwrite()函数。
答案 1 :(得分:4)
文件描述符在线程之间共享。如果你想要“特定于线程”的偏移,为什么不让每个线程多次使用不同的文件描述符(open(2)
)?
答案 2 :(得分:0)
在Linux中,您可以通过unshare()
标志CLONE_FILES
文件描述符表,但我会建议不要这样做。
答案 3 :(得分:0)
尝试pread()/ pwrite()。
您仍然可以在多个线程之间共享相同的filedescriptor,即使用pread()/ pwrite()保证对同一文件的并行读/写是原子的,因为您需要指定偏移量和要读取的字节数/分别写。