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


Доступ к аргументам, передаваемым при вызове exec


Любая программа может получить доступ к аргументам активизировавшего ее вызова exec через параметры, передаваемые ей. Эти параметры описаны в модуле syslinux следующим образом:

var

  argc:integer;

  argv:ppchar;

  envp:ppchar;

Такое описание должно быть знакомо большинству программистов на Си, так как похожий метод используется для доступа к аргументам командной строки при обычном старте программы – еще один признак того, что командный интерпретатор также использует для запуска процессов вызов exec. (Несколько предшествующих примеров и упражнений были составлены с учетом того, что читателям книги известен метод получения программой параметров ее командной строки. Ниже эта тема будет рассмотрена подробнее.)

В вышеприведенном определении значение переменной argc равно числу аргументов, переменная argv указывает на массив самих аргументов, а переменная envp – на массив строк окружения. Поэтому, если программа запускается на выполнение при помощи вызова execvp следующим образом:

const

  argin:array [0..3] of pchar = ('команда', 'с', 'аргументами', nil);

execvp('prog', argin);

то в программе prog будут истинны следующие выражения (выражения вида argv[х] = 'ххх' следует считать фигуральным равенством, а не выражением языка Паскаль):

При использовании модуля syslinux

При использовании модуля system

argc = 3

paramcount = 2

argv[0] = 'команда'

paramstr(0) = 'команда'

argv[1] = 'с'

paramstr(1) = 'с'

argv[2] = 'аргументами'

paramstr(2) = 'аргументами'

argv[3] = nil

paramstr(3) = nil

В качестве простой иллюстрации этого метода рассмотрим следующую программу, которая печатает свои аргументы, за исключением нулевого, на стандартный вывод:[5]

а) с применением модуля system:

(* Программа myecho - вывод аргументов командной строки *)

var

  i:integer;

begin

  for i:=1 to paramcount do

    write(paramstr(i), ' ');

  writeln;

end.

б) с применением модуля syslinux:

(* Программа myecho - вывод аргументов командной строки *)




- Начало -  - Назад -  - Вперед -