我有一个多线程应用程序,它正在打开和读取同一个文件(而非写入)。每个线程都为该文件打开不同的文件描述符(但它们都指向同一个文件)。然后,每个线程读取该文件,如果到达EOF,则可能关闭并再次打开它。这样做可以吗?如果我对文件描述符执行fclose()操作,它会影响指向同一文件的其他文件描述符吗?
我有一个多线程应用程序,它正在打开和读取同一个文件(而非写入)。每个线程都为该文件打开不同的文件描述符(但它们都指向同一个文件)。然后,每个线程读取该文件,如果到达EOF,则可能关闭并再次打开它。这样做可以吗?如果我对文件描述符执行fclose()操作,它会影响指向同一文件的其他文件描述符吗?
对于Linux系统,您不需要多个文件描述符来完成此操作。您可以共享一个文件描述符,并使用pread进行原子性地执行搜索/读取操作,而根本不需要修改文件描述符。
没问题。您可以打开任意多次相同的文件,每个文件描述符都是独立的。
只要每个线程都有自己的文件句柄,那应该可以正常工作。由于您提到使用了fclose()
,这表明您在每个线程中也使用了fopen()
,并且每个线程仅影响其自己的FILE *
变量。
有问题吗?
fopen()
是一个打字错误(应该是 array[i][0] = fopen
...),那么是的,这将工作得很好。只要每个线程不操作属于其他线程的数据即可。 - wallyk