2路管道通讯。不能从孩子那里花钱

时间:2014-09-16 09:39:08

标签: c fork

我无法让这种基本的沟通工作。 我想要做的就是通过子标题将信息发送到父文件描述符。 我遇到了一个段错误。

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>

#define READ 0
#define WRITE 1 
int main(void){


int fdRead[2];
int pid, i, num;
FILE* output;   

char mystring [100];
char c;

 pid = fork();
 if(pid){
  FILE * read;
  close(fdRead[WRITE]); 
  read = fdopen(fdRead[READ], "r");       
  fgets(mystring,100, read);
  printf("parent %d",mystring );
 } else {
 /* child */    
     dup2(fdRead[WRITE], STDOUT_FILENO);
     close(fdRead[READ]);    
     close(fdRead[WRITE]);


     printf("child" );


 }
 exit(0);

}

1 个答案:

答案 0 :(得分:0)

您的代码对管道没有任何作用。 使用管道在父进程和子进程之间进行通信的代码如下所示

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#define READ 0
#define WRITE 1 

int main(void){
    int pipefd[2];
    pid_t pid;
    int i, num;

    if (pipe(pipefd)<0) { /* create pipe */
        perror("pipe");
        exit(-1);
    }   

    char mystring [100];
    char c;

    pid = fork();
    if(pid<0){
        perror("fork");
        exit(-1);
    } else if (pid=1) { /* parent */
        char *mystring = "message to child";
        write(pipefd[WRITE],mystring,strlen(mystring);
        sleep(1); /* wait for child read message */
        char buf[128]; /* buffer to receive data from child */
        read(pipefd[READ],buf, sizeof buf);
        close(pipefd[READ]);
        close(pipefd[WRITE]);
        printf("Returned from child %s",buf );
        return 0;
    } else { /* child */
        char *s="send from child: ";
        char buf[128];
        read(pipefd[READ],buf, sizeof buf);
        write(pipefd[WRITE],s,strlen(s));
        close(pipefd[READ]);
        close(pipefd[WRITE]);
        return 0;
    }
}