read()write()通过带有stdin和stdout的dup2()进入pipe()

时间:2009-04-02 20:21:25

标签: c linux command-line pipe

我需要模拟Linux命令“cal -3”,它会并排显示3个月的日历。我现在需要的是使用管道实现我的实现。我被告知我无法使用fork(),而是应该使用dup2()write()read()close()来调用{{1}三次。现在我的程序不会并排显示日历。

我正在尝试使用管道并遇到问题。这是我正在尝试的:

system("myCustomCommand")

不幸的是,此代码不显示任何内容。你能帮帮我吗?

3 个答案:

答案 0 :(得分:4)

这看起来像是家庭作业,所以我会给你一个解决问题的方法:

  1. 使用一个日历,一次阅读一行并写入stdout。
  2. 现在将每一行存储在一个字符串数组中,并在读完整个日历后打印出每一行。
  3. 让它使用三个日历,将每个日历的结果存储到三个独立的字符串数组中,然后打印出所有三个(不是彼此相邻)。
  4. 不是从一个日历打印出所有行,而是从下一个日历等中打印出所有行,而是从每个日历打印出第一行,然后打印每个日历的第二行等。
  5. 弄清楚格式,直到看起来正确。

答案 1 :(得分:0)

一次显示三个日历与分叉过程无关,实际上你不需要进入管道和东西。

您想要使用的是ncurses库,可以对输出进行特殊控制。

答案 2 :(得分:0)

为什么不使用FILE *fp = popen("my command", "r");,将输出读入字符串数组,重复三次并正确连接数组?