代码之家  ›  专栏  ›  技术社区  ›  Frames Catherine White

并行运行的程序,用C读/写

io c
  •  1
  • Frames Catherine White  · 技术社区  · 15 年前

    我正在考虑一组4个程序:(Prog1,Prog2,Prog3,Prog4) 与4个文件(FileA、FileB、FileC、FileD)交互

    • Prog1:写入(追加)文件A
    • Prog2:读取文件A并将其写入(附加)到文件B
    • Prog4:读取文件B,并将其写入(附加)到文件B

    或者可能是Prog1,也可能在启动时读取,然后连续写入,比如说FileX。

    现在,所有4个程序将同时运行(可能通过网络运行,但这不重要)。这样行吗?

    我需要设置“选通”或“忙”信号吗(我可以用mkdir和rmdir来设置)?

    3 回复  |  直到 15 年前
        1
  •  1
  •   dirkgently    15 年前

    您的问题是同步读/写吗?写入是问题更大的部分,因为写入会修改内容。此外,书写的性质(结尾追加、开头追加等)可能会使您的情况进一步复杂化。我觉得您可能需要查找“文件锁”/“互斥锁”等。这在很大程度上取决于您计划在哪些操作系统上运行这些锁。 Boost.Interprocess 这是一个很好的开始。

        2
  •  0
  •   fvu    15 年前

    我认为这里需要某种真正的FIFO结构,也称为管道。在Windows和Unix操作系统下有同名的结构。

    here ,Windows下的命名管道 here

        3
  •  0
  •   Jonathan Leffler    15 年前

    如果每个程序都打开它使用的文件,那么就没有大问题。主要问题与“tail-f”必须处理的问题相同,即每个读取进程都可能读取到EOF,然后必须暂停并重试以查看何时有更多数据可用。

    如果您有一个打开所有文件的中央进程,则需要打开文件a进行两次读取,以便Prog2和Prog3可以独立访问该文件。然而,对于任何协调进程来说,似乎更明智的做法是简单地告诉孩子们要打开哪些文件。