C管及工艺

时间:2018-06-20 13:17:35

标签: c process operating-system pipe ps

我对此过程的作业有疑问。 有一个父进程有两个孩子(第一个孩子打印问候),第二个孩子有另一个孩子。 父级应将bash命令“ ps”传递给子级(第二个),然后再传递另一个子级(孙子级),这应执行该命令。 我首先尝试仅传递一个字符串,以查看是否正确放置了所有管道以及父子之间的关系,但是它确实正确打印了该字符串。

您能帮我解决这个问题吗?以及bash命令?

感谢阅读此书的所有人

int main(){ 

pid_t pid;
int pipefd[2];
char comando[10] ;
pipe(pipefd);



fork();
pid = getpid();

if(pid == 0){ // figlio F1
    printf("C:F1 printing...");
    printf("    HELLO   ");
}else if(pid > 0){//parent
    printf("P: sending command ps to F2\n");        
    comando[10] = "ps";

    close(pipefd[0]);   
    write(pipefd[1],(void*)&comando ,sizeof(comando)  );


    pid = fork();
    if(pid == 0){//figlio F2
        printf("C:F2 receiving from parent \n");
        close( pipefd[1] );
        read(pipefd[0], (void*)&comando , sizeof(comando));
        printf("C:F2 riceve %s \n",comando);
        pid = fork();
        printf("C:F2 sending %s to F3\n",comando);
        close(pipefd[0]);
        write(pipefd[1], (void*)&comando, sizeof(comando));
        if(pid == 0){
            printf("C:F3 receiving from F2\n");
            close( pipefd[1] );
            read(pipefd[0], (void*)&comando , sizeof(comando));
            //int system(const char *comando);
            printf("C:F3 print %s \n",comando);
        }
    }
}else{
    printf("fork error\n");     
}
wait(NULL);
return 0;
}

0 个答案:

没有答案