У меня есть программа, которая должна создать дочерний процесс и выполнить команду ls. Выходные данные этой команды должны передаваться в родительский процесс, где она выводится на экран.
Проблема заключается в том, что родительский процесс получает выходные данные дочернего процесса в отсортированном порядке. После 2 дней работы над ним я все еще не понимаю, зачем он это делает.
Это мой код:
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/wait.h>
int main(){
int Pipe1[2];
int pid, numread;
char buf;
pipe(Pipe1);
pid = fork();
if(pid == 0){
close(Pipe1[0]);
dup2(Pipe1[1], STDOUT_FILENO);
close(Pipe1[1]);
execl("/bin/ls", "ls", NULL);
}
else{
close(Pipe1[1]);
dup2(Pipe1[0], STDIN_FILENO);
close(Pipe1[0]);
while(1){
numread = read(STDIN_FILENO, &buf, 1);
if(numread > 0)
fprintf(stderr, "%c", buf);
else break;
}
close(STDOUT_FILENO);
wait(NULL);
}
}
Это ожидаемый результат:
a.out tk-quiz-01-ptr-trace.pdf tk-quiz-02c-prog-image-static.pdf tk-quiz-04-cpu-schedule.pdf
quiz7.c tk-quiz-02b-cl-allocate.pdf tk-quiz-03-unix-process.pdf tk-quiz-05-cpu-sch-link-list.pdf
Это фактический результат:
a.out
quiz7.c
tk-quiz-01-ptr-trace.pdf
tk-quiz-02b-cl-allocate.pdf
tk-quiz-02c-prog-image-static.pdf
tk-quiz-03-unix-process.pdf
tk-quiz-04-cpu-schedule.pdf
tk-quiz-05-cpu-sch-link-list.pdf