Когда я компилирую и запускаю следующий код:
#include <stdlib.h>
#include <unistd.h>
#define N 20
int main() {
int fd[2], p, n;
char c[N];
pipe(fd);
p = fork();
if (p == 0) {
dup2(fd[1], 1);
execlp("date" , "date" , NULL);
write(fd[1], "Bye", 3);
}
else {
close(fd [1]);
while((n=read(fd[0], &c, N)) > 0) write(1, &c, N);
}
exit (0);
}
, результат будет следующим:
Wed May 27 15:28:21 CEST 2020
15:28:21
Похоже, что вывод даты записывается дважды и перекрывается но я не понимаю почему и как. Я вижу, что есть два файловых дескриптора для вывода (через dup2), но дата выполняется только один раз, а его вывод передается на входную сторону родительского канала. Как получается, что добавляется вторая неполная строка даты?
Заранее спасибо!