c - 在 C 中将三个命令连接在一起
问题描述
我正在尝试创建自己的“unix 风格”外壳。我希望能够使用循环将 N 个命令连接在一起。然而到目前为止我一直没有成功。我能够将 2 个命令连接在一起,现在我正在尝试将 3 个命令连接在一起。当我执行时,什么都没有发生,似乎父进程只是在等待子进程。作为参考,我要执行的命令是: ls | 头-3 | 尾-1。
int p1[2], p2[2]; //pipes
pipe(p1);
int pid1, pid2;
pid1 = fork(); //create child
if (pid1 ==0) { //child
close(1); //close stdout
dup(p1[1]);
close(p1[0]); //closes pipes we dont need
close(p1[1]);
exec(command[0][0], command[0]); //execute command
exit(0);
}
pipe(p2); //create 2nd pipe
pid2=fork(); //create child
if(pid2 == 0) { //child process
close(0); //close stdin
dup(p1[0]);
close(p1[0]); //close pipes we dont need
close(p1[1]);
close(1); //close stdout
dup(p2[1]);
close(p2[0]);
close(p2[1]);
exec(command[1][0], command[0]); //execute command
exit(0);
}
else
{ //parent
wait(NULL); //stops here
wait(NULL); //waiting for child processes to complete
close(p1[0]);
close(p1[1]);
close(0); //close stdin
dup(p2[0]);
close(p2[0]); //close pipes we dont need
close(p2[1]);
exec(command[2][0], command[2]); //execute command
}
解决方案
推荐阅读
- python - 在 tensorflow 中创建顶部“k”元素掩码的更有效方法
- c# - 使用 #syncfusion 将 word doc 转换为 .ConvertToPDF 时出现问题
- fluentd - 以原始格式解析 Fluentd 中的日志
- ruby-on-rails - 如何使用 const_get 和动态父类提示 Sorbet?
- julia - Julia 中的“where T”在 T 之后没有任何说明的情况下做了什么?
- azure - 无法使用 Graph API 移除应用角色分配。获取“未找到正在更新或删除的 EntitlementGrant。” 错误
- javascript - 以图像叠加为中心的传单地图
- twilio - Twilio 拨打两个号码,当第二个电话仍在响铃时,它会为一个号码播放语音邮件
- php - 使用 PHP shell_exec() 导出数据库并压缩它
- php - POST 或 AJAX 通过单击从单个文件加载的按钮显示一种或另一种形式(登录或注册)