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


         

Программные каналы


Упражнение 13.57. Напишите программу, определяющую, возвращает ли fstat количество байт в FIFO в качестве поля size структуры tstat.

uses linux;

var

  s:tstat;

 

begin

  if paramcount<>1 then

  begin

    writeln('Используйте: ',paramstr(0),' имя_файла');

    exit;

  end;

  if not fstat(paramstr(1),s) then

  begin

    writeln('Ошибка вызова stat для файла ',paramstr(1));

    exit;

  end;

  writeln('Размер файла ',paramstr(1),' равен ',s.size);

end.

 

Упражнение 13.58. Напишите программу для определения того, что возвращает функция select при проверке возможности записи в дескриптор канала, у которого закрыт второй конец.

uses linux;

var

  fds:fdset;

  fdin,fdout,ret:longint;

 

begin

  if not assignpipe(fdin,fdout) then

  begin

    writeln('Ошибка создания программного канала');

    exit;

  end;

  fd_zero(fds);

  fd_set(fdin,fds);

  fd_set(fdout,fds);

  fdwrite(fdout,'Некая достаточно длинная строка',31);

  fdclose(fdin);

  writeln('Вызов select');

  ret:=select(2,nil,@fds,nil,1000);

  writeln('select вернул ',ret);

end.

 

Упражнение 13.59. Используя канал между родителем (клиентом) и потомком (сервером), создайте программу, в которой клиент считывает имя файла из стандартного ввода и записывает в канал. Если файл существует, сервер считывает его и записывает в канал, в противном случае возвращает клиенту сообщение об ошибке.

uses linux,sysutils;

const

  BLOCKSIZE=1024;

var

  pid,(*идентификатор процесса*)

  filesize,(*размер файла*)

  fd,(*дескриптор файла*)

  kol,(*количество прочитанных байт*)

  i:longint;

  in1,out1,in2,out2:longint;(*дескрипторы программных каналов*)

  filename:string[80];

  st:tstat;(*для получения информации о размере файла*)

  buf:array[0..BLOCKSIZE-1]of char;(*буфер чтения-записи*)

begin

  (*попытка создания двух программных каналов*)

  if not assignpipe(in1,out1) then

  begin

    writeln('Ошибка создания первого программного канала');



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





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