【发布时间】:2010-04-18 21:03:04
【问题描述】:
我有一个多线程应用程序正在打开和读取同一个文件(而不是写入)。我为每个线程打开一个不同的文件描述符(但它们都指向同一个文件)。然后每个线程读取该文件,如果达到 EOF,则可以关闭它并再次打开它。这个可以吗?如果我对文件描述符执行 fclose() 是否会影响指向同一文件的其他文件描述符?
【问题讨论】:
标签: multithreading file file-descriptor fclose
我有一个多线程应用程序正在打开和读取同一个文件(而不是写入)。我为每个线程打开一个不同的文件描述符(但它们都指向同一个文件)。然后每个线程读取该文件,如果达到 EOF,则可以关闭它并再次打开它。这个可以吗?如果我对文件描述符执行 fclose() 是否会影响指向同一文件的其他文件描述符?
【问题讨论】:
标签: multithreading file file-descriptor fclose
对于 Linux 系统,您不需要多个文件描述符来执行此操作。您可以共享单个文件描述符并使用pread 原子地执行查找/读取操作,而无需修改文件描述符。
【讨论】:
没关系。您可以随时打开同一个文件,并且每个文件描述符将相互独立。
【讨论】:
这应该可以正常工作,前提是每个线程都有自己的文件句柄。由于您提到使用fclose(),这表明您也在每个线程中使用fopen(),并且每个线程只影响其自己的FILE * 变量。
有问题吗?
【讨论】:
fopen() 是一个错字(应该是array[i][0] = fopen...),那么是的,这将正常工作。前提是每个线程不操作属于其他线程的数据。