带有管道的C编程很奇怪地打印到STDOUT

时间:2014-11-10 22:07:50

标签: c pipe exec fork

我正在为我的操作系统类编写一个编程任务,我遇到了一些问题,我的输出显示在终端中。

程序的目的是从文件或STDIN中获取输入,并基本上通过4个管道传递它以获得单词的频率。我正在使用fork(),execlp()和pipe()的调用来完成这个,并且我的程序没有任何问题,但是当最后一个子项执行并打印到终端时它看起来像这样:

os-class ~/cs344/Homework3 190% myword text.txt  
os-class ~/cs344/Homework3 191%       1 aaaaa        
1 aaaaaa      
  1 aaaaaaa  
      8 it  
      5 s  
      5 sa  

(这里我可以输入191%的命令,类似'ls'..)

myword是我的可执行文件,text.txt是我用来测试的文件。我很困惑,因为看起来我的管道与STDIN和STDOUT正确对齐。我需要在某处插入wait()吗?

感谢您提出任何建议,如果已经有人在这里找到答案,那就很抱歉!我不确定要搜索什么。

1 个答案:

答案 0 :(得分:0)

fork()的每个父母都需要wait()对其子女进行处理,否则孩子将在父母退出后继续竞选。

shell(如果你写的话)也需要等待它启动的程序。