Почему функция процесса чтения сына не возвращает (я думаю, что она вернет -1), а функция печати процесса сына не работает - PullRequest
0 голосов
/ 19 мая 2019

Почему функция процесса чтения сына не возвращает (я думаю, она вернет -1), а функция процесса печати сына не работает.

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

int main() {
    int fd[2];
    pipe(fd);
    pid_t pid = fork();
    if(pid == 0) {
        char buf[128] = {0};
        int ret = read(fd[0], buf, sizeof buf);
        printf("Son ret is %d\n", ret);
        write(STDOUT_FILENO, buf, ret);
    }
    else if(pid > 0){
        char buf[128] = "hello\n\0";
        write(fd[1], buf, sizeof buf);
        memset(buf, 0, sizeof buf);
        int ret = read(fd[0], buf, sizeof buf);
        printf("Dad ret is %d\n", ret);
        write(STDOUT_FILENO, buf, ret);
    }
    return 0;
}

1 Ответ

1 голос
/ 19 мая 2019
  1. Не определено, какой процесс получит буфер.Может быть, родитель, может быть, ребенок, может, оба получат половину от каждого.Возможно, в вашем эксперименте отец получает весь буфер, но никто не гарантирует, что это всегда будет происходить.
  2. Процесс должен закрыть неиспользуемый конец записи своего канала, иначе он никогда не увидитEOF на конце чтения.Таким образом, ребенок должен вызвать close(fd[1]), прежде чем делать что-либо еще.
  3. (не имеет отношения) Явный \0 в конце строкового литерала не требуется.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...