Системное программирование в UNIX средствами Free Pascal


         

Описание


uses stdio;

function pipeopen(comstring, _type:pchar):pfile;

function pipeclose(strm:pfile):integer;

Procedure POpen(Var F:FileType; comstring:pathstr; _type:char);

Function PClose(Var F:FileType):longint;

Как и процедура runshell, процедуры popen и pipeopen создает дочерний процесс командного интерпретатора для запуска команды, заданной параметром comstring. Но, в отличие от процедуры runshell, она также создает канал между вызывающим процессом и командой. При этом pipeopen возвращает структуру TFILE, связанную с этим каналом, а popen – переменную файлового типа. Если значение параметра _type равно w, то программа может выполнять запись в стандартный ввод при помощи структуры TFILE. Если же значение параметра _type равно r, то программа сможет выполнять чтение из стандартного вывода программы. Таким образом, процедуры popen и pipeopen представляют простой и понятный метод взаимодействия с другой программой.

Для закрытия потока, открытого при помощи процедуры popen, должна всегда использоваться процедура pclose. Она будет ожидать завершения команды, после чего вернет статус ее завершения.

Пример использования POpen:

uses linux;

var f : text;

    i : longint;

   

begin

  writeln ('Creating a shell script to which echoes its arguments');

  writeln ('and input back to stdout');

  assign (f,'test21a');

  rewrite (f);

  writeln (f,'#!/bin/sh');

  writeln (f,'echo this is the child speaking.... ');

  writeln (f,'echo got arguments \*"$*"\*');

  writeln (f,'cat');

  writeln (f,'exit 2');

  writeln (f);

  close (f);

  chmod ('test21a',octal (755));

  popen (f,'./test21a arg1 arg2','W');

  if linuxerror<>0 then

     writeln ('error from POpen : Linuxerror : ', Linuxerror);

  for i:=1 to 10 do

    writeln (f,'This is written to the pipe, and should appear on stdout.');

  Flush(f);

  Writeln ('The script exited with status : ',PClose (f));

  writeln;

  writeln ('Press <return> to remove shell script.');




Содержание  Назад  Вперед