IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Моделирование
Анна
сообщение 26.10.2008 14:22
Сообщение #1


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


В продолжении темы Потоки.
Есть строка "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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Анна
сообщение 1.12.2008 23:22
Сообщение #2


Бывалая
***

Группа: Пользователи
Сообщений: 290
Пол: Женский
Реальное имя: Анютка

Репутация: -  7  +


Измененный вариант, но все равно не работает 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 18:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"