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


         

Программа io


В качестве очень простого примера использования стандартных дескрипторов файлов приведем программу io, применяющую системные вызовы fdread и fdwrite и дескрипторы файлов со значениями 0 и 1 для копирования стандартного ввода в стандартный вывод. В сущности, это усеченная версия программы UNIX cat. Обратите внимание на отсутствие вызовов fdopen и fdcreat.

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

(* в стандартный вывод *)

uses linux;

const

  SIZE=512;

var

  nread:longint;

  buf:array [0..SIZE-1] of byte;

begin

  nread := fdread (0, buf, SIZE);

  while nread > 0 do

  begin

    fdwrite (1, buf, nread);

    nread := fdread (0, buf, SIZE);

  end;

  halt(0);

end.

Предположим, что исходный код этой программы находится в файле iо.pas, который компилируется для получения исполняемого файла io:

$ fpc io.pas

Если теперь запустить программу io на выполнение, просто набрав имя файла программы, то она будет ожидать ввода с терминала. Если пользователь напечатает строку и затем нажмет клавишу Return

или Enter на клавиатуре, то программа iо просто выведет на дисплей напечатанную строку, то есть запишет строку в стандартный вывод. При этом диалог с системой в действительности будет выглядеть примерно так:

$ io          Пользователь печатает io и нажимает Return

Это строка 1  Пользователь печатает строку и нажимает Return

Это строка 1  Программа io

выводит строку на дисплей

.

.

.

После вывода строки на экран программа io будет ожидать дальнейшего ввода. Пользователь может продолжать печатать, и программа io

будет послушно выводить каждую строку на экран при нажатии на клавишу Return или Enter.

Для завершения программы пользователь может напечатать строку из единственного символа конца файла. Обычно это символ ^D, то есть Ctrl+D, который набирается одновременным нажатием клавиш Ctrl и D. При этом вызов fdread вернет 0, указывая на то, что достигнут конец файла. Весь диалог с системой мог бы выглядеть примерно так:

$ io

Это строка 1

Это строка 1



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





Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий