代码之家  ›  专栏  ›  技术社区  ›  benrush

当应用于同一个文件描述符的多个FILE*时,fwrite()是原子的吗?

  •  0
  • benrush  · 技术社区  · 1 年前
    1. 使用fileno()获取实际的文件描述符 stdout .
    2. 使用fdopen()创建两个不同的FILE*结构,命名为 a 和 b .
    3. 创建两个线程,名称 A 和 B ,使用fwrite()将一些内容写入 一 和 b .

    问题:

    1. 这个操作是正确的,还是推荐的?
    2. 如果A线程正在写入 123 ,B线程正在写入 456 ,有可能吗 142536 在stdout中有输出吗?
    1 回复  |  直到 1 年前
        1
  •  1
  •   tl-photography.at    1 年前

    也许看看这里: fopen and fwrite to the same file from multiple threads

    更好地定义另一个线程,该线程负责控制文件,并实现一个类似队列的结构,其他任务可以用数据填充该结构。

    然后,文件线程将从结构中弹出(想想FIFO)数据并将其写入文件。

        2
  •  0
  •   Wiimm    1 年前

    如果日志记录可能很有趣:如果文件是用以下方式打开的 open() 和模式 O_APPEND ,然后(摘录 man open ):

    O_APPEND:文件以追加模式打开。在每次写入(2)之前, 文件偏移量位于文件的末尾,就像 lseek(2)。文件偏移量的修改和写入操作 作为单个原子步骤执行。

    如果使用 fopen() 带模式 a 或 a+ ,然后模式 O_APPEND 已设置。

    推荐文章