Гость Опубликовано 24 апреля, 2001 Жалоба Поделиться Опубликовано 24 апреля, 2001 Пишу на Си: int i; i = dup(fileno(stdout)); fprintf(stdout,"1\n"); stdout = reopen("/res","w",stdout); fprintf(stdout,"2\n"); fflush(stdout); execlp("ipchains","","-L"); fclose(stdout); stdout = fdopen(i,"w"); fprintf(stdout,"3\n"); fprintf(stderr,"---stderrr---\n"); Результат: (на экране) 1 (в файле) 2 [список цепочек] И ВСЕ! Ни третьей трассироввочной пометки, ни вывода в stderr! После execlp вывод как ножом отрезало! В чем я ошибся? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 апреля, 2001 Жалоба Поделиться Опубликовано 25 апреля, 2001 Потому что после execlp все остальное не будет работать. При вызове execlp Ваш процесс заменяется другим - ipchains. Если надо вызвать какую-то программу, а после нее продолжить исполнение - то тут либо библиотечная функция system() (самый простой вариант) либо - fork/exec/wait Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 апреля, 2001 Жалоба Поделиться Опубликовано 25 апреля, 2001 Посмотри, что записано в errno. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Гость Опубликовано 25 апреля, 2001 Жалоба Поделиться Опубликовано 25 апреля, 2001 Все оказалось гораздо проще - popen Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.