закрываем ненужные каналы: первый для
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.
Содержание Назад Вперед