Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> cgi и stdout, сохранение stdout 
:(
    Опции темы
Lych
Дата 20.10.2006, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Возникла такая проблема: пишу cgi скрипт, в нем необходимо вызвать скрипт оболочки.
Результаты своей работы скрипт пишет в stdout и как следствие этот текст попадает в браузер, что крайне не желательно.

Чтобы этого не происходило делаю так:

FILE* stream = freopen( "/wc/freopen.out", "w", stdout);
execl("/wc/webmake.sh", 0)
fclose(stream);

а вот как вернуть stdout в прежнее состояние не знаю.


PM MAIL   Вверх
MAKCim
Дата 20.10.2006, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Код

int fd = fcntl(STDOUT_FILENO, F_DUPFD, 3);
FILE* stream = freopen( "/wc/freopen.out", "w", stdout);
execl("/wc/webmake.sh", 0)
dup2(fd, STDOUT_FILENO);
close(fd);



--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lych
Дата 20.10.2006, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



не работает  smile 

еслине не запускать скрипт то все отлично, а вот если запустить, то потом ничего не выводится

похоже что из execl("/wc/webmake.sh", 0) не возвращается

Это сообщение отредактировал(а) Lych - 20.10.2006, 16:00
PM MAIL   Вверх
MAKCim
Дата 20.10.2006, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Lych
ну да, отвлекся и забыл про execl
execl заменяет образ памяти текущего процесса соответствующей программой
соответственно из execl процесс не возвращается (затирается сегмент кода)
создай новый процесс и в нем сделай execl
Код

...
pid_t pid = fork();

if (pid == 0) {
    int fd = open("/wc/freopen.out", O_WRONLY);
   
     if (fd == -1)
        _exit(errno);
    
    dup2(fd, STDOUT_FILENO);

    /* С этого момента stdout для этого процесса перенаправлен в /wc/freopen.out */

    execl("/wc/webmake.sh", 0);
}

else if (pid < 0); /* Нельзя создать процесс */

/* Тут с stdout все в порядке */

int status;

waitpid(pid, &status, 0);

if (status > 0);   /* Ошибка выполнения скрипта */
/* Далее твоя программа  */
...


Это сообщение отредактировал(а) MAKCim - 20.10.2006, 16:14


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Lych
Дата 23.10.2006, 07:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 20.10.2006

Репутация: нет
Всего: нет



Огромное СПАСИБО, все заработало. Тему можно закрывать.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0660 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.