我正在为我的操作系统类编写一个编程作业,我遇到了一些关于我的输出在终端中显示的方式的问题。
该程序的目的是从文件或 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()
吗?
感谢您的任何建议,如果某处已经有答案,我们深表歉意!我不确定要搜索什么。
最佳答案
执行 fork()
的每个父级都需要对其子级执行 wait()
,否则子级将在父级退出后继续运行。
shell(如果您编写了它)也需要等待它启动的程序。
关于C Programming w/Pipes 奇怪地打印到 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853902/