Гость Опубликовано 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 Цитата
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.