The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"функция exec"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"функция exec"  
Сообщение от Анд on 10-Авг-06, 14:16 
подскажите пжлста как можно запустить файл через функцию exec чтобы вывод из этого файла перенаправлялся в другой файл. Заранее спасибо.
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "функция exec"  
Сообщение от ufobject email(??) on 10-Авг-06, 17:01 
>подскажите пжлста как можно запустить файл через функцию exec чтобы вывод из
>этого файла перенаправлялся в другой файл. Заранее спасибо.

Просто добавь к имени запускаемого файла строку типа " > outfile.txt".

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

2. "функция exec"  
Сообщение от Анд on 14-Авг-06, 16:12 
>>подскажите пжлста как можно запустить файл через функцию exec чтобы вывод из
>>этого файла перенаправлялся в другой файл. Заранее спасибо.
>
>Просто добавь к имени запускаемого файла строку типа " > outfile.txt".

это то понятно, тока через функцию exec не прокатывает....не понимает что это перенаправление вывода...может есть какие то тонкости ?


Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

3. "функция exec"  
Сообщение от int_0d email on 14-Авг-06, 16:14 
man popen?
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

4. "функция exec"  
Сообщение от Alexander S. Salieff email on 16-Авг-06, 17:17 
>man popen?

Это выход, но только если в одну сторону - или читать или писать (сам до сих пор не пойму, неужели впадлу было сделать дуплексную схему? ;). А если хочется полного интерактива, то лепим 2 пайпа, форкаемся, в дочернем процессе fdopenами/freopenaми перебиваем свой stdin/stdout на эти пайпы и делаем exec, а в родительском через эти пайпы читаем/пишем в запущенный процесс. Так, имхо, простору для творчества куда больше, чем с popenом.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

5. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Анд on 18-Авг-06, 17:13 
  
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

6. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Alexander S. Salieff email on 21-Авг-06, 15:44 
отэческий процесс:
mkfifo("/tmp/stdin_fifo", S_IRWXU);
mkfifo("/tmp/stout_fifo", S_IRWXU);
mkfifo("/tmp/stderr_fifo", S_IRWXU);

дочерний процесс:
freopen("/tmp/stdin_fifo", "r", stdin);
freopen("/tmp/stdout_fifo", "w", stdout);
freopen("/tmp/stderr_fifo", "w", stderr);
execl(....);

Теперь из родительского процесса можно писать в /tmp/stdin_fifo и читать из /tmp/stdout_fifo и /tmp/stderr_fifo кося под пользователя ;)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

7. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Forth (??) on 21-Авг-06, 15:57 
>отэческий процесс:
>mkfifo("/tmp/stdin_fifo", S_IRWXU);
>mkfifo("/tmp/stout_fifo", S_IRWXU);
>mkfifo("/tmp/stderr_fifo", S_IRWXU);
>
>дочерний процесс:
>freopen("/tmp/stdin_fifo", "r", stdin);
>freopen("/tmp/stdout_fifo", "w", stdout);
>freopen("/tmp/stderr_fifo", "w", stderr);
>execl(....);
>
>Теперь из родительского процесса можно писать в /tmp/stdin_fifo и читать из /tmp/stdout_fifo
>и /tmp/stderr_fifo кося под пользователя ;)
А фифо-то зачем?
В родительском:
pipe(descr1);
pipe(descr2);
fork();
close(descr2[0]);
close(descr1[1]);
В дочернем после fork:
close(stdin);
dup(descr2[0]);
close(stdout);
dup(descr1[1]);
close(descr2[1]);
close[descr1[0]);
execl();
Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

8. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Alexander S. Salieff email on 21-Авг-06, 16:06 
>>отэческий процесс:
>>mkfifo("/tmp/stdin_fifo", S_IRWXU);
>>mkfifo("/tmp/stout_fifo", S_IRWXU);
>>mkfifo("/tmp/stderr_fifo", S_IRWXU);
>>
>>дочерний процесс:
>>freopen("/tmp/stdin_fifo", "r", stdin);
>>freopen("/tmp/stdout_fifo", "w", stdout);
>>freopen("/tmp/stderr_fifo", "w", stderr);
>>execl(....);
>>
>>Теперь из родительского процесса можно писать в /tmp/stdin_fifo и читать из /tmp/stdout_fifo
>>и /tmp/stderr_fifo кося под пользователя ;)
>А фифо-то зачем?
>В родительском:
>pipe(descr1);
>pipe(descr2);
>fork();
>close(descr2[0]);
>close(descr1[1]);
>В дочернем после fork:
>close(stdin);
>dup(descr2[0]);
>close(stdout);
>dup(descr1[1]);
>close(descr2[1]);
>close[descr1[0]);
>execl();

Так, безусловно, изящнее, и для линуха 100 пудов прокатит. Но, к сожалению, основываецца на том факте, что dup отдаст тебе самый маленький из доступных свободных дескрипторов, а это никакой стандарт не гарантирует :(

Наверное, истина в 3ем варианте, чтобы сделать
dup2(descr2[0], stdin);
dup2(descr1[1], stdout);
.....
:)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

9. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Forth (??) on 21-Авг-06, 16:11 
>Так, безусловно, изящнее, и для линуха 100 пудов прокатит. Но, к сожалению,
>основываецца на том факте, что dup отдаст тебе самый маленький из
>доступных свободных дескрипторов, а это никакой стандарт не гарантирует :(
>
>Наверное, истина в 3ем варианте, чтобы сделать
>dup2(descr2[0], stdin);
>dup2(descr1[1], stdout);
>.....
>:)

The dup() system call duplicates an existing object descriptor and
     returns its value to the calling process (newd = dup(oldd)).  The argu-
     ment oldd is a small non-negative integer index in the per-process
     descriptor table.  The value must be less than the size of the table,
     which is returned by getdtablesize(2).  The new descriptor returned by
     the call is the lowest numbered descriptor currently not in use by the
     process.


-----skip----

STANDARDS
     The dup() and dup2() system calls are expected to conform to ISO/IEC
     9945-1:1990 (``POSIX.1'').

HISTORY
     The dup() and dup2() functions appeared in Version 7 AT&T UNIX.

Хммм, по-моему из man однозначно понятно что по posix самый младший по номеру дескриптор. Можно конечно и dup2.

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

10. "что то не сообразить как перебить stdin/stdout на пайпы"  
Сообщение от Alexander S. Salieff email on 21-Авг-06, 16:13 
>Хммм, по-моему из man однозначно понятно что по posix самый младший по
>номеру дескриптор. Можно конечно и dup2.

Вынужден признать что был неправ и невнимателен ;)

Правка | Высказать мнение | Ответить | Cообщить модератору | Наверх

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру