在C中编码多个管道
发布时间:2020-12-16 03:29:28 所属栏目:百科 来源:网络整理
导读:我正在尝试在C中为我的 shell实现多个管道. 我只有一个管道功能管道| b但不是| b | C. int c[2];int returnv;pid_t id;pipe(c);pid = fork()) == 0if (pid){ dup2(c[1],0); close(p[1]); close(p[1]); execvp(array(0),array);}if ((pid = fork()) == 0){ du
我正在尝试在C中为我的
shell实现多个管道.
我只有一个管道功能管道| b但不是| b | C. int c[2]; int returnv; pid_t id; pipe(c); pid = fork()) == 0 if (pid) { dup2(c[1],0); close(p[1]); close(p[1]); execvp(array(0),array); } if ((pid = fork()) == 0) { dup2(p[0],1); close(p(0)); close(p[0]); returnv = execvp(array[0],array); } close(p[1]); wait(NULL); wait(NULL); wait(NULL); return returnv; 这是第二个版本: int i = 0; while (i < x) { pipe(c); if ((pid = fork()) == 0) { dup2(t[i],1); if (i < 2) dup2(p[0],1); close(p[1]); r= execvp(cmd[i][0],cmd[i]); } wait(NULL); close(p[0]); i += 1; t[i] = p[1]; 我怎样才能添加一些能使这段代码管理多个管道的东西呢? 解决方法
编辑:根据您的评论
要执行多重管道,您需要将所有命令存储在某处. 检查这个新版本可能更容易理解 首先,您需要一个选项卡或其他东西来存储所有命令: int main() { char *ls[] = {"ls",NULL}; char *grep[] = {"grep","pipe",NULL}; char *wc[] = {"wc",NULL}; char **cmd[] = {ls,grep,wc,NULL}; loop_pipe(cmd); return (0); } 然后是将运行选项卡并启动所有内容的函数 void loop_pipe(char ***cmd) { int p[2]; pid_t pid; int fd_in = 0; while (*cmd != NULL) { pipe(p); if ((pid = fork()) == -1) { exit(EXIT_FAILURE); } else if (pid == 0) { dup2(fd_in,0); //change the input according to the old one if (*(cmd + 1) != NULL) dup2(p[1],1); close(p[0]); execvp((*cmd)[0],*cmd); exit(EXIT_FAILURE); } else { wait(NULL); close(p[1]); fd_in = p[0]; //save the input for the next command cmd++; } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |