Недавно я начал подозревать, что неправильно использую концы труб:
Из справочных страниц:
pipe () создает канал .. ..pipefd [0] ссылается на конец чтения
труба. pipefd [1] относится к концу записи канала.
Так что у меня в голове было вот так:
.---------------------------.
/ /\
| pipedfd[0] pipedfd[1]| |
process1 ---> | | -----> process2
| input output| |
\____________________________\/
Однако код, который у меня есть и работает, предполагает иное:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int pipedfd[2];
char buf[30];
pipe(pipedfd);
printf("writing to file descriptor #%d\n", pipedfd[1]);
write(pipedfd[1], "test", 5);
printf("reading from file descriptor #%d\n", pipedfd[0]);
read(pipedfd[0], buf, 5);
printf("read \"%s\"\n", buf);
return 0;
}
А именно, он записывает на выход (?) Канала и считывает с входа (?) Канала?