Путаница с «читать» «писать» в программе Simple Pipe - PullRequest
0 голосов
/ 17 февраля 2020

Я использую следующий простой код для понимания использования системных вызовов pipe и read / write для передачи простого текста от родителя к ребенку:

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


int main(int argc, char *argv[]){

    pid_t pid;
    int pipeFD[2];
    int ret;
    char buf[50];

    ret = pipe(pipeFD);
    if(ret == 1){
        perror("pipe error");
        exit(1);
    }
    pid = fork();
    if(pid ==0)
    {
        //child process will read from pipe.
        printf("Child process\n");
        printf("closing writing end...\n");
        close(pipeFD[1]);
//      read(pipeFD[0], buf, 20);   
        printf("Buf: %s \n",buf);
        exit(0);
    }
    if(pid > 0)
    {
        //parent process will write on to the pipe
        printf("Parent process\n");
        printf("closing reading end...\n");
        close(pipeFD[0]);   
        printf("closed!\n");        
        write(pipeFD[1],"hello people!",14);//13 = number of characters in second argument of write
        // try this     
        //wait(NULL);
    }
    return 0;
}

Я считаю, что по умолчанию write и read являются блокирующими / синхронными вызовами. Что меня смущает, так это почему родительский блок не выполняет системный вызов write, когда ребенок НЕ вызывает read (комментируемый код)? Это интерфейс к системному вызову, а не сам системный вызов, который не позволяет мне увидеть поведение, которое я ожидаю, или моя концепция не верна? Пожалуйста, помогите мне здесь.

Большое спасибо.

...