C语言中的pipe 2 linux命令

发布于 2024-11-15 18:49:12 字数 469 浏览 1 评论 0原文

可能的重复:
是否可以在由同一父进程创建的两个子进程之间有管道(LINUX,POSIX)

我想用 C 创建一个程序。该程序必须能够执行与管道 2 Linux 命令相同的操作。 例如: PS 辅助 | grep ssh

我需要能够在 ac 脚本中执行此命令。

我知道我可以使用 forkpipeexecdup 但我不太知道如何把它们放在一起... 有人可以帮我解决这个问题吗?

Possible Duplicate:
Is it possible to have pipe between two child processes created by same parent (LINUX, POSIX)

I want to create a program in C. This program has to be able to do the same that piping 2 linux commands do.
For Example:
ps aux | grep ssh

I need to be able to do this command in a c script.

I know I can use, fork, pipe, exec and dup but I don't quite know how to put them together...
Can someone help me with this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

音盲 2024-11-22 18:49:12

作为一个简单的示例,这应该可以让您简要了解这些系统调用如何协同工作。

void spawn(char *program,char *argv[]){    
     if(pipe(pipe_fd)==0){
          char message[]="test";
          int write_count=0;

          pid_t child_pid=vfork();

          if(child_pid>0){
               close(pipe_fd[0]); //first close the idle end
               write_count=write(pipe_fd[1],message,strlen(message));
               printf("The parent process (%d) wrote %d chars to the pipe \n",(int)getpid(),write_count);
               close(pipe_fd[1]);
          }else{
               close(pipe_fd[1]);
               dup2(pipe_fd[0],0);

               printf("The new process (%d) will execute the program %s with %s as input\n",(int)getpid(),program,message);
               execvp(program,argv);
               exit(EXIT_FAILURE);
          }
     }
}

As a simple example, this should give you a brief idea of how those system calls work together.

void spawn(char *program,char *argv[]){    
     if(pipe(pipe_fd)==0){
          char message[]="test";
          int write_count=0;

          pid_t child_pid=vfork();

          if(child_pid>0){
               close(pipe_fd[0]); //first close the idle end
               write_count=write(pipe_fd[1],message,strlen(message));
               printf("The parent process (%d) wrote %d chars to the pipe \n",(int)getpid(),write_count);
               close(pipe_fd[1]);
          }else{
               close(pipe_fd[1]);
               dup2(pipe_fd[0],0);

               printf("The new process (%d) will execute the program %s with %s as input\n",(int)getpid(),program,message);
               execvp(program,argv);
               exit(EXIT_FAILURE);
          }
     }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文