如何在c中创build一个linuxstream水线的例子

如何在c中创build一个linuxstream水线的例子,第1张

概述如何在c中创build一个linuxstream水线例子

我试图学习如何在C中使用pipe()命令,并尝试创build一个testing程序来复制ls | grep ".c" ls | grep ".c" ,如果我要进入linuxterminal。 如果我input这个terminal,我只得到test.c作为结果。

我的代码如下:

#include "stdio.h" #include "stdlib.h" #include "unistd.h" #include "fcntl.h" int main(int argc,char** argv) { int pipefd[2]; int childpID,childpID2; char* cmd[3]={"ls",NulL,NulL}; char* cmd2[3]={"grep",".c",NulL}; pipe(pipefd); if(childpID=fork()){ //parent }else{ //child //write close(pipefd[0]); dup2(pipefd[1],STDOUT_fileNO); execvp("ls",cmd); } if(childpID2=fork()){ } else{ close(pipefd[1]); dup2(pipefd[0],STDIN_fileNO); execvp("grep",cmd2); } close(pipefd[0]); close(pipefd[1]); return 0; }

此代码返回以下结果($是terminal提示符):

$a.out $test.c (blank line)

该程序没有完成,但挂起,直到我离开它。 我有什么问题? 我怎样才能模仿terminal? 我是C新手,使用程序的预制模板,如果有明显的错误,请原谅我。

从C开始使用StartServiceCtrldispatcher和StartService的windows服务有什么区别?

经典窗口主题的c ++ GetCurrentthemename返回空值

即使共享被拒绝读取和写入,防病毒如何能够以读取模式打开文件

C#(单声道)linux Web服务器托pipe跨线程一致的静态variables

我如何自动创build用户的备份?

CryptExportKey在C#

我如何自动调整RDLC报告中的列宽

开始使用http隧道

在linux下的正常运行时间在C

LNK1106与大二进制资源

尝试这个:

#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> int main(int argc,NulL}; pipe(pipefd); if(childpID=fork()){ //parent close(pipefd[1]); dup2(pipefd[0],cmd2); }else{ //child //write close(pipefd[0]); dup2(pipefd[1],cmd); } return 0; }

实际上,程序马上退出 – 事实上,父进程会在子进程运行之前退出,这就是“test.c”之前有一个shell提示符的原因。

您可以通过在您的父级中添加以下内容来改进一点:

wait(childpID); wait(childpID2);

这会让父母在两个孩子之后退出。

您的程序立即退出,而您的进程在后台运行。 它们会覆盖提示符,并使您认为程序仍在运行,即使shell正在等待输入(按回车键或盲目输入命令并查看。

你只能看到test.c因为这是你目录中唯一的匹配文件(还要注意,你正在检查“除第一个字符之外的任何地方包含c的文件名”,而不是“以.c结尾”,这将是grep '.c$' )。

简单的解决方法是添加:

wait(NulL); wait(NulL);

在你return 0之前return 0 。

总结

以上是内存溢出为你收集整理的如何在c中创build一个linuxstream水线的例子全部内容,希望文章能够帮你解决如何在c中创build一个linuxstream水线的例子所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1293438.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-10
下一篇 2022-06-10

发表评论

登录后才能评论

评论列表(0条)

保存