[Overview][Constants][Types][Procedures and functions][Variables] Reference for unit 'oldlinux' (#rtl)

POpen

Pipe file to standard input/output of program

Declaration

Source position: line 0

procedure POpen(

  var F: text;

  const Prog: String;

  rw: Char

);

procedure POpen(

  var F: ;

  const Prog: String;

  rw: Char

);

Description

POpenruns the command specified in Cmd, and redirects the standard in or output of the command to the other end of the pipe F. The parameter rwindicates the direction of the pipe. If it is set to 'W', then F can be used to write data, which will then be read by the command from stdinput. If it is set to 'R', then the standard output of the command can be read from F. Fshould be reset or rewritten prior to using it. Fcan be of type Textor File. A file opened with POpencan be closed with Close, but also with PClose. The result is the same, but PClosereturns the exit status of the command Cmd.

Errors

Errors are reported in LinuxErrorand are essentially those of the Execve, Dup and AssignPipe commands.

See also

AssignPipe

  

Create a set of pipe file handlers

PClose

  

Close file opened with POpen

Example

Program Example37;

{ Program to demonstrate the Popen function. }

uses oldlinux;

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.');
  readln;
  assign (f,'test21a');
  erase (f)
end.