альтернативная реализация pipe () с использованием чтения / записи в файл - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть альтернативная реализация pipe() в Linux:

int pipe(int pipefd[2]) {
    char *name = unique_name();
    pipefd[1] = open(name, O_WRONLY|O_CREAT|O_TRUNC, 0600);
    pipefd[0] = open(name, O_RDONLY, 0600);
    unlink(name);
    return 0;
}

Является ли эта реализация допустимой альтернативой для pipe(), как на man-странице ? Если нет, то почему?

1 Ответ

0 голосов
/ 09 февраля 2020

Эта реализация неверна, потому что чтение из канала должно возвращать 0 вместо блокировки.

По семантике c pipe (), при чтении до того, как что-то записывается, процесс блокируется и ожидает для данных. В этой реализации чтение перед записью возвращает 0 (EOF).

...