Я просмотрел огромное количество ссылок и вопросов Google, чтобы понять, как работает pipping, но я не могу понять концепцию перенаправления моего stdout на stdin моей второй программы.
Я пытаюсь создать программу, которая перемещает символы текста, зашифровывает их и помещает в строку. Моя вторая программа должна взять эту строку и расшифровать ее. Я понимаю функции, которые необходимы для создания канала, но я не понимаю, как он указывает на следующую программу. Весь исходный код, на который я смотрел, кажется, содержит в себе как родительский, так и дочерний элементы, а не вторая программа.
Установление канала между стандартными потоками двух программ зависит от того, как вы запускаете программы. Если один исполняет другой (fork()
/execlp()
Например, родитель создает канал с pipe()
и родитель и ребенок используют dup2()
связать концы канала с соответствующими файловыми дескрипторами (перед выполнением exec, в случае дочернего процесса).
Если ни одна из программ не запускает другую, то программа, делает запустить их (обычно это оболочка) надо настроить на трубу.
Предполагая, что вы используете оболочку в операционной системе Unix, канал |
символ используется для создания этой ссылки. Например: я хочу запустить программу1 и перенаправить стандартный вывод программы1 на программу2 в качестве стандартного ввода.
program1 | program2
вот пример linux получения имен содержимого каталога с помощью ls
затем обвязать это head -3
чтобы получить имена первых трех файлов. Затем мы передаем три имени tail -1
получить последний (или имя третьего файла в каталоге).
ls | head -3 | tail -1