Я пытаюсь реализовать оболочку linux, которая поддерживает трубопровод. Я уже выполнил простые команды, команды, работающие в фоновом режиме, перенаправления, но конвейер все еще отсутствует.
Я уже читал об этом и видел некоторые фрагменты кода, но все еще не смог разобраться в работающем решении.
Что у меня так далеко:
int fd[2];
pipe(fd);
pid_t pid = fork();
if (pid == -1)
return -1;
if (pid == 0)
{
close(fd[1]); //close write to pipe, in child
execlp("cat", "cat", "names.txt", NULL);
}
else
{
close(fd[0]); //close read from pipe, in parent
execlp("sort", "sort", NULL);
}
Я начинающий программист, как вы, вероятно, можете сказать, и когда я программирую что-то, о чем мало что знаю, в этом, очевидно, дело, мне нравится начинать с чего-то действительно простого и конкретного, а затем строить оттуда ,
Итак, прежде чем я смогу реализовать три и более различных команд в конвейере, я хотел бы иметь возможность вычислить «ls names.txt | sort» или что-то похожее, в котором names.txt представляет собой файл имен, алфавитно неупорядоченный .
Обновленный код, но все еще не работает.
Спасибо.