Logo Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Архив форумов ЦИТФорума
Море(!) вопросов - Море(!) ответов
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
Как правильно задавать вопросы

прпадает stdout в дочернем процессе под XP.

 
Перейти:  
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
Гена_С
Гость





СообщениеДобавлено: Сб Май 08 2004 13:10    Заголовок сообщения: прпадает stdout в дочернем процессе под XP. Ответить с цитатой

есть 2 программы. Одна запускает другую. Обе выводят на консоль (я прробовал и stderr и stdout).
Под win98 -все нормально. Под XP дочерний процесс ничего на консоль не выводит. ПРи этом запускаеться и работает - я пробовал писать в файл - все пишет ок.
да - я проверял №№ каналов stdout и stderr в родителе и дочке - одинаковые.

Подскажите - что я сделал не так. мне нужно видеть вывод обоих процессов

вот коды. родитель.
Код:

// parent.cpp
#include <iostream>
#include <stdlib.h>   
#include <windows.h>
#include <process.h>

using std::cerr;

int main (){

   char cmdline[]="child_proc.exe";
        HANDLE handle_stdout=GetStdHandle(STD_OUTPUT_HANDLE);
        HANDLE handle_stderr=GetStdHandle(STD_ERROR_HANDLE);   

   cerr<<" ** calling child process, cmdline="<<cmdline<<"\n";
        cerr<<" stdout="<<(int)handle_stdout<<" stderr="<<(int)handle_stderr<<"\n";

   DWORD exitCode;
   STARTUPINFO s_info={sizeof(STARTUPINFO),NULL,NULL,NULL,0,0,0,0,0,0,0,
             /* STARTF_USESTDHANDLES */ 0,SW_SHOWMINNOACTIVE, 0,NULL,
             0,0,0};

   PROCESS_INFORMATION p_info;   
   BOOL pCreate=CreateProcess(NULL,cmdline,NULL,NULL,FALSE/*TRUE*/,
                     CREATE_NO_WINDOW,NULL,NULL,&s_info, &p_info);   

   WaitForSingleObject(p_info.hProcess,60000);

     cerr<<" ** returned from child process: \n";

return 1;
}



вот дочка
Код:

#include <fstream>
#include <iostream>
#include <windows.h>

main (){
  std::cout<<" child: cout\n";
  std::cerr<<" child: cerr\n";
  printf(" child: printf\n");
  std::flush(std::cout);
  std::ofstream ou("test");
  ou<<"child ok\n";

  HANDLE handle_stdout=GetStdHandle(STD_OUTPUT_HANDLE);
  HANDLE handle_stderr=GetStdHandle(STD_ERROR_HANDLE);   

  ou<<" stdout="<<(int)handle_stdout<<" stderr="<<(int)handle_stderr<<"\n";
  std::cerr<<" stdout="<<(int)handle_stdout<<" stderr="<<(int)handle_stderr<<"\n";

  ou.close();
return 1;
}



вот что я имею на win98 и на winXP
Код:


-- Win98 console -------------------------------------------------------
C:\home\work1\stdio>parent.exe
 ** calling child process, cmdline=child_proc.exe
  stdout=12  stderr=16
 child: cout
 child: cerr
 child: printf
 stdout=12 stderr=16
 ** returned from child process:

-- WinXP console -------------------------------------------------------
C:\home\work1\stdio>parent.exe
 ** calling child process, cmdline=child_proc.exe
  stdout=7  stderr=11
 ** returned from child process:
-------------------------------------------------------------------------



Спасибо. Гена
Вернуться к началу
wildwind



Зарегистрирован: 03.02.2004
Сообщения: 268
Откуда: Москва

СообщениеДобавлено: Пн Май 10 2004 02:33    Заголовок сообщения: Ответить с цитатой

Твой код выглядит так, как будто ты его накопировал из книжки или еще откуда, не вникая в смысл. А доку по STARTUPINFO прочитать было слабо?

То что у тебя закомментарено, /* STARTF_USESTDHANDLES */, это и есть как раз то, что тебе надо. Этот флаг говорит CreateProcess, что хочу мол подменить stderr и stdout. А в последних двух полях нужно передать соответствующие хэндлы, то есть handle_stdout и handle_stderr в твоем случае.

И конечно в CreateProcess параметр bInheritHandles должен быть TRUE, а не FALSE.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail
Показать сообщения:   
Этот форум закрыт, вы не можете писать новые сообщения и редактировать старые.   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Архив форумов ЦИТФорума -> Программирование Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2002 phpBB Group
Русская поддержка phpBB

 

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 6608306, ICQ 232284597
Пресс-релизы — pr@citforum.ru
Послать комментарий
Информация для авторов
This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2006 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...