Windows上有多少个独立的文件指针/位置?

时间:2013-01-23 12:52:22

标签: c windows file

如果我在一个线程内打开一个文件(使用CreateFile())两次,这样我一次有两个有效的句柄,那么这两个文件句柄是否有一个共享的“文件指针”(SetFilePointer()),或者这两个句柄是否会有独立的“文件指针”?

如果一个进程中有两个并发线程,并且它们每个都拥有同一个文件的一个句柄,该怎么办?这两个句柄是否有独立的文件指针?

3 个答案:

答案 0 :(得分:3)

每次线程打开文件时,都会创建一个新的file object,其中包含一组新的特定于句柄的属性。例如,当前字节偏移属性是指文件中将使用该句柄进行下一次读取或写入操作的位置。即使共享底层文件,文件的每个句柄都有一个专用字节偏移量。文件对象对于进程也是唯一的,除非进程将文件句柄复制到另一个进程(通过使用Windows DuplicateHandle函数)或子进程从父进程继承文件句柄。在这些情况下,这两个进程具有引用同一文件对象的单独句柄。 Windows Internals 5th

答案 1 :(得分:2)

不同的文件句柄具有不同的文件指针,因此这些方案可以正常工作(例如,两个线程可以“同时”从同一文件的不同部分读取“只要每个都独占使用自己的文件句柄)。” p>

答案 2 :(得分:1)

由对CreateFile的不同调用创建的文件句柄具有独立的文件指针。您可以根据需要在单独的线程中使用它们。

处理由DuplicateHandle 共享重复的文件指针:不要使用它来获取另一个线程中使用的“单独”文件句柄。