Приветствую.
Вопрос следующий, никак не могу понять как принять своей программой пайп. То есть через TProcess можно реализовать запуск команды иполучить ее вывод, это все происходит внутри программы. Хотелось бы подать данные сразу на мою программу и чтобы она их приняла. Короче чтобы програ могла в конвеерах работь. Ну к примеру:
cat file.txt | my_program
Вопрос по пайпам (pipes)
Модератор: Модераторы
Код: Выделить всё
program my_program;
var c:char;
begin
while not eof(stdin) do begin
read(stdin,c);
...
end
end.
- Это концепция, есличто, реально компилируемый код:
Код: Выделить всё
program my_program;
var c:char;
begin
while not eof(input) do begin
read(input,c);
(*...*)
end
end.
???
Zhbr писал(а): Ну к примеру:
cat file.txt | my_program
Как все просто оказалось
даже стыдно. Спасибо.
Но если честно в вики ничего подобного не нашел.
Но если честно в вики ничего подобного не нашел.
Если пайпы работают через простой readln, то что тогда делают AssignPipe и POpen?
mirk писал(а):Если пайпы работают через простой readln, то что тогда делают AssignPipe
http://www.freepascal.org/docs-html/rtl ... npipe.html
Создаёт пару пайп, через которую можно прогонять сообщения внутри программы. Предполагаю, что это полезно, например, для передачи данных из одного потока в другой.
и POpen?
http://www.freepascal.org/docs-html/rtl ... popen.html
Запускает процесс, ввод или вывод которого управляется из программы.
Полагаю, обе функции работают только в линуксе (а POpen, видимо, вообще является надстройкой над стандартным popen).
Readln в консольной программе по умолчанию читает stdin. Постановка вопроса непонятна.
Дож писал(а):Постановка вопроса непонятна.
Подойдем с другого края - в каких случаях мне надо использовать readln, в каких AssignPipe, в каких POpen?
Когда нужно прочесть из какого-то файла строку текста -- можно использовать Readln.
Когда в программе есть несколько тредов, и есть необходимость родительскому треду взаимодействовать со своим подтредом, то можно использовать AssignPipe, который создаст так называемую анонимную пайпу, через которую можно будет пересылать данные от одного треда к другому.
Когда нужно запустить внешнюю программу, при этом что-то отправить ей на вход или что-то прочесть с её выхода (что-то одно), -- можно использовать POpen.
Когда в программе есть несколько тредов, и есть необходимость родительскому треду взаимодействовать со своим подтредом, то можно использовать AssignPipe, который создаст так называемую анонимную пайпу, через которую можно будет пересылать данные от одного треда к другому.
Когда нужно запустить внешнюю программу, при этом что-то отправить ей на вход или что-то прочесть с её выхода (что-то одно), -- можно использовать POpen.
