2010-04-18 187 views
6

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

回答

3

没关系。您可以打开所有需要相同文件的时间,并且每个文件描述符将相互独立。

0

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

有问题吗?

+0

基本上,我创建了一个2-dim文件指针数组(因为每个线程都会读取x文件),总共有y个线程。所以我的FILE *数组是数组[y] [x]。对于给定的线程i,我通过fopen(array [i] [0])打开一个文件(例如文件0)。然后,我读取(fread)文件(并非全部一次)并执行其他任务(尽管如此,不会发生文件写入)。在阅读过程中,如果达到EOF,我会确认并再次打开。我担心的是,当我打开和打开时,是否可以以任何方式影响来自其他线程的指向我执行的同一文件的其他FILE *指针f关闭 – Gigi 2010-04-18 21:19:37

+0

假设您的fopen()是拼写错误(它应该是'array [i] [0] = fopen' ...),那么是的,这将工作正常。如果每个线程不处理属于其他线程的数据。 – wallyk 2010-04-18 22:07:04

+0

谢谢。是的,所有线程都对这个文件做了fopen(),fread()和fclose()。 – Gigi 2010-04-18 22:56:42

3

对于Linux系统,您不需要多个文件描述符来执行此操作。您可以共享一个文件描述符,并使用pread以原子方式执行查找/读取操作,而无需修改文件描述符。

+0

'pread'是POSIX,所以它不仅限于Linux。 – 2017-04-26 16:28:29