一个进程内的不同线程是否有独立的文件描述符表?如果同一进程中的多个线程同时访问单个文件,那么由不同线程执行的两个open
调用的文件偏移是否为特定于线程的?
不,每个进程只有一个文件描述符表,并且它在所有线程之间共享。
根据您的问题描述,您可能需要查看pread()和pwrite()函数。
文件描述符在线程之间是共享的。如果你想要“线程特定”的偏移量,为什么不让每个线程使用一个不同的文件描述符(open(2)
多次)呢?
dup
和dup2
不行(他需要“线程特定”的偏移量)。 - cnicutar尝试使用pread()/pwrite()。
您仍然可以在多个线程之间共享同一文件描述符,即使用pread()/pwrite()进行并行读/写将保证是原子操作,因为您需要分别指定偏移量和要读取/写入的字节数。
CLONE_FILES
标志使用unshare()
文件描述符表,但我建议不要这样做。
pread
和pwrite
。 - R.. GitHub STOP HELPING ICE