C Programming w/Pipes 奇怪地打印到 STDOUT

标签 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() 吗?

感谢您的任何建议,如果某处已经有答案,我们深表歉意!我不确定要搜索什么。

最佳答案

执行 fork() 的每个父级都需要对其子级执行 wait(),否则子级将在父级退出后继续运行。

shell(如果您编写了它)也需要等待它启动的程序。

关于C Programming w/Pipes 奇怪地打印到 STDOUT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26853902/

相关文章:

python - 二进制文件转python整数列表

c - 如何使用 ld 检测链接中的歧义

c - dbus 示例 - on_name_lost 位于 on_name_acquired 之后

C char 数组和指针 - 归并排序的合并

linux - 为什么我的命名管道输入命令行在被调用时挂起?

bash get 在管道符号之前使用的命令

php 不能执行任何外部命令?

exec - docker-exec 失败 : "cd": executable file not found in $PATH

c - 如何通过 hook sys_exit_group 和 sys_kill 使进程无法退出

linux - `execve()` 是否设置寄存器来调用动态链接器或要执行的可执行文件?