【问题标题】:Multiple file descriptors to the same file, C同一个文件的多个文件描述符,C
【发布时间】:2010-04-18 21:03:04
【问题描述】:

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

【问题讨论】:

    标签: multithreading file file-descriptor fclose


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      没关系。您可以随时打开同一个文件,并且每个文件描述符将相互独立。

      【讨论】:

        【解决方案3】:

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

        有问题吗?

        【讨论】:

        • 基本上,我为总共 y 个线程创建了一个 2-dim 文件指针数组(因为每个线程将读取 x 个文件)。所以我的 FILE* 数组是数组 [y] [x]。例如,对于给定的线程 i,我通过 fopen(array[i][0]) 打开一个文件(对于文件 0)。然后我读取(fread)文件(虽然不是一次全部)并执行其他任务(但没有发生文件写入)。在读取过程中,如果达到 EOF,我会执行 fclose,然后再次执行 fopen。我担心的是,当我 fclose 和 fopen 时,我是否会以任何方式影响来自其他线程的其他 FILE * 指针,这些指针指向我执行 fclose o 的同一文件
        • 假设您的fopen() 是一个错字(应该是array[i][0] = fopen...),那么是的,这将正常工作。前提是每个线程不操作属于其他线程的数据。
        • 谢谢。是的,所有线程都在对这些文件执行 fopen()、fread() 和 fclose()。
        猜你喜欢
        • 2018-08-15
        • 2021-08-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-04-09
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多