c - 在linux中使用管道同时写入文件

标签 c linux file pipe system-calls

我有一个文件 names.txt Pop,Jack 和一个文件 surnames.txt Ioan,Gry。我需要获得以下输出,person.txt,Pop Ioan,Jack Gry。我必须创建两个程序:

  • 首先从文件names.txt中读取并写入person.txt。
  • 第二次读取 surnames.txt 并写入 person.txt。

我需要使用管道进行同步。我该怎么做?

最佳答案

每个程序将打开一个用于读取的命名管道和一个用于写入的命名管道,用于追加的 person.txt(或仅写入标准输出)以及适当的输入文件(或从标准输入读取)。一个程序(可能由命令行 arg 指定)将首先立即读取一行并将其写入输出,然后将单个字节写入一个管道,然后阻止从另一个管道读取。另一个程序等待第一个管道上的字节,然后写入其文本和换行符,然后再将字节写入另一个管道。因此,您只需传递一个 token (写入管道的字节)即可同步写入。简单地将管道名称作为命令行参数传递给程序,然后通过将单个字节写入其中一个管道来启动整个过程可能会很好,但是程序并不相同,因为必须编写一个新队。最好的选择是编写一个程序,但使用不同的命令行参数调用它。 (我不知道这是否符合“两个程序”的条件。)

关于c - 在linux中使用管道同时写入文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30151726/

相关文章:

c - 当文本文件为空时如何停止读取字符串

java - 从脚本设置 Java 版本

java - 在java游戏中隐藏分数文件

c - 如何创建一个全局字符串变量,将其设置在某处,然后将其 fputs 到一个文件中?

c - 从相对路径获取绝对路径

c - 在 strtok 之后将 arg 传递给 execl

linux - XCB 准备好投入生产了吗?我应该改用 Xlib 吗?

c# - 通过 mono 命令执行时出现异常

java - 当我尝试将文件从 jar 内复制到磁盘时,为什么会收到 'nullfiles' ?

java - 将文件保存在两个单独的文件夹中时出现 FileNotFoundException