Разве каналы в UNIX не должны быть однонаправленными?

Взгляните на следующий код:

#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 и каналах еще не ясны, так что я могу показаться немного неубедительным, но, пожалуйста, помогите.

8
задан Mahouk 16 March 2019 в 21:43
поделиться