同一文件的多个文件描述符,C

8

我有一个多线程应用程序,它正在打开和读取同一个文件(而非写入)。每个线程都为该文件打开不同的文件描述符(但它们都指向同一个文件)。然后,每个线程读取该文件,如果到达EOF,则可能关闭并再次打开它。这样做可以吗?如果我对文件描述符执行fclose()操作,它会影响指向同一文件的其他文件描述符吗?

3个回答

5

对于Linux系统,您不需要多个文件描述符来完成此操作。您可以共享一个文件描述符,并使用pread进行原子性地执行搜索/读取操作,而根本不需要修改文件描述符。


确实,我正在寻找pread和pwrite。谢谢。 - amirouche

3

没问题。您可以打开任意多次相同的文件,每个文件描述符都是独立的。


0

只要每个线程都有自己的文件句柄,那应该可以正常工作。由于您提到使用了fclose(),这表明您在每个线程中也使用了fopen(),并且每个线程仅影响其自己的FILE *变量。

有问题吗?


基本上,我创建了一个二维文件指针数组(因为每个线程将读取x个文件),共y个线程。所以我的FILE*数组是array[y][x]。对于给定的线程i,例如(对于文件0),我通过fopen(array[i][0])打开一个文件。然后我读取(fread)文件(不过不是一次性读取),并执行其他任务(没有进行文件写入)。在读取期间,如果到达EOF,我会执行fclose,然后再次执行fopen。我的担心是,当我执行fclose和fopen时,是否会以任何方式影响其他线程的FILE *指针,这些指针指向我执行fclose的同一文件。 - Gigi
假设您的 fopen() 是一个打字错误(应该是 array[i][0] = fopen...),那么是的,这将工作得很好。只要每个线程不操作属于其他线程的数据即可。 - wallyk
谢谢。是的,所有线程对这些文件所做的操作都是fopen()、fread()和fclose()。 - Gigi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接