Я использую следующий простой код для понимания использования системных вызовов 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
(комментируемый код)? Это интерфейс к системному вызову, а не сам системный вызов, который не позволяет мне увидеть поведение, которое я ожидаю, или моя концепция не верна? Пожалуйста, помогите мне здесь.
Большое спасибо.