Взгляните на следующий код:
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/types.h>
main() {
int pipdes[2];
char buff[50];
const char parent[]="Parent Writes. Child Reads\n";
const char child[]="Child Writes. Parent Reads\n";
if(pipe(pipdes)==0) {
pid_t pid=fork();
if(pid<0)
printf("Error\n");
if(pid==0){
read(pipdes[0],buff,50);
printf("Parent: %s",buff);
write(pipdes[1], child, strlen(child));
exit(0);
}
else if(pid>0) {
write(pipdes[1], parent, strlen(parent));
wait(pid);
read(pipdes[0], buff, 50);
printf("Child: %s", buff);
}
}
else
printf("Error in pipe\n");
}
Здесь я создал только один канал, но оба процесса могут читать и писать из него. Разве трубы не должны быть однонаправленными. Кроме того, когда я помещаю обычное 'close (pipdes [0])' для родительского и 'close (pipdes [1])' для дочернего, код не работает, хотя я добавляю функцию open (pipdes [0]) потом.
Мои представления о UNIX и каналах еще не ясны, так что я могу показаться немного неубедительным, но, пожалуйста, помогите.