回 帖 发 新 帖 刷新版面

主题:[讨论]请教一个linux程序的编写

这道题的题目是:利用无名管道编写程序实现父进程向子进程发送命令,子进程获取命令,解析命令并执行命令。

我知道了大致框架。但是其中的细节部分我不知道怎么编写啊。。请大家帮我完善下啊。。中文注释的就是要完善的地方。谢谢了

#include<unistd.h>     /* pipe() */
#include<stdio.h>
#include<sys/types.h>  /* pid_t */
#define MAXLINE 4096 
int  main(void)
{
    int n;
    int fd[2];
    pid_t pid;
    char line[MAXLINE];
    //创建管道  
if(pipe(fd)<0)
        printf("pipe error\n");
    //创建子进程
if((pid=fork())<0)
        printf("fork error\n");
    else if(pid>0)  /* parent*/
    {
        //父进程发命令
    }else           /* child*/
    {    
        //子进程接收命令并处理
    }
    return 1;    
}

回复列表 (共1个回复)

沙发

#include <sys/wait.h>
       #include <assert.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <unistd.h>
       #include <string.h>
 
       int
       main(int argc, char *argv[])
       {
           int pfd[2];
           pid_t cpid;
           char buf;
 
           assert(argc == 2);
 
           if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); }
 
           cpid = fork();
           if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }
 
           if (cpid == 0) {    /* Child reads from pipe */
               close(pfd[1]);          /* Close unused write end */
 
               while (read(pfd[0], &buf, 1) > 0)
                   write(STDOUT_FILENO, &buf, 1);
 
               write(STDOUT_FILENO, "\n", 1);
               close(pfd[0]);
               _exit(EXIT_SUCCESS);
 
           } else {            /* Parent writes argv[1] to pipe */
               close(pfd[0]);          /* Close unused read end */
               write(pfd[1], argv[1], strlen(argv[1]));
               close(pfd[1]);          /* Reader will see EOF */
               wait(NULL);             /* Wait for child */
               exit(EXIT_SUCCESS);
           }
       }

父进程的 write你想发什么就发什么,子进程的read,读出来的东西,按你自己定的协议解析并执行就可以了

我来回复

您尚未登录,请登录后再回复。点此登录或注册