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


         

закрываем ненужные каналы: первый для


    fdclose(in1); (* закрываем ненужные каналы: первый для чтения, второй - для записи*)

    fdclose(out2);

    write('Введите имя файла: '); (*запрос имени файла*)

    readln(filename);

    fdwrite(out1,filename,80); (*пишем имя в программный канал*)

    {}writeln('Клиент: имя файла записано в канал');

    fdread(in2,filesize,sizeof(filesize)); (*получем размер файла из канала*)

    {}writeln('Клиент: из канала получен размер файла - ',filesize);

    if in2=-1 then (*при ошибке*)

      writeln('Файл ',filename,' не существует или недоступен для чтения')

    else

    begin

      (*создаем файл*)

      {}writeln('Клиент: файл создан, идет прием');

      for i:=length(filename) downto 1 do

        if filename[i]='/' then

        begin

          delete(filename,1,i);

          break;

        end;

      fd:=fdopen(filename,Open_WRONLY or Open_CREAT or Open_TRUNC, octal(644));

      if fd=-1 then

      begin

        writeln('Ошибка создания файла ',filename);

        kill(pid,9);

        halt(1);

      end;

     

      for i:=1 to filesize do(*пока есть что читать из канала*)

      begin

        fdread(in2,buf,1);

        if i mod BLOCKSIZE=0 then

        {}writeln('Клиент: записано в файл ',i div BLOCKSIZE,' Kb');

        fdwrite(fd,buf,1);(*записываем в файл*)

      end;

      fdclose(fd);(*закрываем созданный файл*)

      {}writeln('Клиент: файл закрыт');

    end;

    waitpid(pid,nil,0); (*ожидаем завершения потомка*)

    {}writeln('Клиент: сервер завершен, конец работы');

  end;

end.

Упражнение 13.60. Используя popen, создайте канал между who и more.

uses linux;

var

  f1,f2:text;

  s:string;

begin

  popen(f1,'who','r');

  if linuxerror <> 0 then

  begin

    writeln('Ошибка открытия канала с who для чтения');

    exit;

  end;

  popen(f2,'more','w');

  if linuxerror <> 0 then

  begin

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

    exit;

  end;

  while not eof(f1) do

  begin

    readln(f1,s);

    writeln(f2,s);

  end;

  pclose(f1);

  pclose(f2);

end.


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