我正在为我的操作系统类编写一个编程任务,我遇到了一些问题,我的输出显示在终端中。
程序的目的是从文件或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()
吗?
感谢您提出任何建议,如果已经有人在这里找到答案,那就很抱歉!我不确定要搜索什么。
答案 0 :(得分:0)
fork()
的每个父母都需要wait()
对其子女进行处理,否则孩子将在父母退出后继续竞选。
shell(如果你写的话)也需要等待它启动的程序。