Вопрос по пайпам (pipes)

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Вопрос по пайпам (pipes)

Сообщение Zhbr » 07.09.2015 05:37:54

Приветствую.
Вопрос следующий, никак не могу понять как принять своей программой пайп. То есть через TProcess можно реализовать запуск команды иполучить ее вывод, это все происходит внутри программы. Хотелось бы подать данные сразу на мою программу и чтобы она их приняла. Короче чтобы програ могла в конвеерах работь. Ну к примеру:
cat file.txt | my_program
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

Re: Вопрос по пайпам (pipes)

Сообщение SSerge » 07.09.2015 05:53:45

Код: Выделить всё
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
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Вопрос по пайпам (pipes) [Решено]

Сообщение Zhbr » 07.09.2015 07:40:17

Как все просто оказалось :D даже стыдно. Спасибо.
Но если честно в вики ничего подобного не нашел.
Zhbr
новенький
 
Сообщения: 44
Зарегистрирован: 31.01.2014 02:34:21

Re: Вопрос по пайпам (pipes)

Сообщение mirk » 09.02.2016 20:19:00

Если пайпы работают через простой readln, то что тогда делают AssignPipe и POpen?
mirk
постоялец
 
Сообщения: 317
Зарегистрирован: 24.09.2007 10:03:39

Re: Вопрос по пайпам (pipes)

Сообщение Дож » 09.02.2016 20:40:37

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. Постановка вопроса непонятна.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Вопрос по пайпам (pipes)

Сообщение mirk » 15.03.2016 00:32:11

Дож писал(а):Постановка вопроса непонятна.

Подойдем с другого края - в каких случаях мне надо использовать readln, в каких AssignPipe, в каких POpen?
mirk
постоялец
 
Сообщения: 317
Зарегистрирован: 24.09.2007 10:03:39

Re: Вопрос по пайпам (pipes)

Сообщение Дож » 15.03.2016 03:03:06

Когда нужно прочесть из какого-то файла строку текста -- можно использовать Readln.

Когда в программе есть несколько тредов, и есть необходимость родительскому треду взаимодействовать со своим подтредом, то можно использовать AssignPipe, который создаст так называемую анонимную пайпу, через которую можно будет пересылать данные от одного треда к другому.

Когда нужно запустить внешнюю программу, при этом что-то отправить ей на вход или что-то прочесть с её выхода (что-то одно), -- можно использовать POpen.
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 34

Рейтинг@Mail.ru