Помощь - Поиск - Пользователи - Календарь
Полная версия: Моделирование
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Анна
В продолжении темы Потоки.
Есть строка "tr -d "[0-9]" < a.txt | sort | uniq > b.txt". Нужно под Unix, используя FPC сделать прог-у, модедирующую работу интерпретатора.

Вот что получилось:
Uses BaseLinux, Unix;
var
fd, fd2 : integer;
begin
fd:=fpopen ('a.txt', o_rdonly);
fpclose(0);
fpdup(fd);
fpfcntl(fd,f_setfd,0);
fpexecl ('tr',['-d','[0-9]']);
fpexecv ('sort',nil);
fd2:=fopen('b.txt',o_wronly or creat);
fpclose(1);
fpdup(fd2);
fpfcntl(fd2,f_setfd,1);
fpexecv('uniq',nil);
end.

Не могу разобраться как перенаправить потоки с одного выхода на др. вход.
Т.е. с tr -d "[0-9]" < a.txt на sort, далее uniq > b.txt
Анна
ап
Анна
Измененный вариант, но все равно не работает sad.gif
uses unix,BaseUnix;
var
fd, fd1 : cint;
pid : pid_t;
pfd : Tfildes;
ch : char;
s : AnsiString;
Begin
fd :=fpOpen('a.txt',o_rdonly);
fd1 :=fpOpen('b.txt',o_wronly or o_creat);

Assert(fpPipe(pfd) <> -1,'fail to create pipe' );
pid := fpFork;
Assert(pid <> -1,'fail to fork' );
if pid = 0 then
begin
fpClose(0);
fpClose(1);
fpdup2(fd,1);
fpdup2(pfd[1],1);
fpExeclp('tr',['-d','1']);
end;
fpwait(pid);
if fpfork = 0 then
begin
fpClose(1);
fpClose(0);
fpdup2(fd1,1);
fpdup2(pfd[1],0);
fpexeclp('tr',['-d','2']);
end;
fpwait(pid);
end
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.