Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > C++ Builder
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2017, 17:22   #21
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не, это не то.
Вам в stdin писать надо, а не выводить что-то куда-то.
https://www.google.com/search?q=crea...write+to+stdin
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
http://stackoverflow.com/questions/2...-in-c-language
Думаю, что здесь вполне реальный пример:
https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

Попробую оформить пару тестов на эту тему...
COREYCO вне форума Ответить с цитированием
Старый 09.05.2017, 19:49   #22
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

Вроде бы всё получилось...

Только чтение ReadFile(...) вычитывает весь текст вывода консоли...
А хотелось бы читать только новые строки, т.к. предыдущие уже обработаны...
Что-то вроде Position здесь нужно, которую можно динамически увеличивать
на размер "предыдущего прочитанного"...


В любом случае, огромное всем спасибо!!

С Днём Победы!
COREYCO вне форума Ответить с цитированием
Старый 09.05.2017, 19:51   #23
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так можно просто взять один раз хендл для чтения и читать из него всегда.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.05.2017, 20:09   #24
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Так можно просто взять один раз хендл для чтения и читать из него всегда.
"Взять" это как... Можно уточнить?

Если переприсвоить: READ_h = READ_stdout_h, то результат тот же -
всегда читает с самого начала...
COREYCO вне форума Ответить с цитированием
Старый 09.05.2017, 20:16   #25
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А как вы читаете?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.05.2017, 20:18   #26
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

ReadFile
(
rSTD_out,
ss,
10000,
&nR,
NULL
);
COREYCO вне форума Ответить с цитированием
Старый 09.05.2017, 20:21   #27
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так а rSTD_out откуда? Если он не новый каждый раз (снова CreatePipe и т.п.), то вроде не должно старое читаться.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.05.2017, 20:24   #28
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

Код:
STARTUPINFO          Si;
PROCESS_INFORMATION  Pi;
SECURITY_ATTRIBUTES  Sa;
DWORD nRW;
HANDLE rSTD_in = NULL, wSTD_in = NULL, rSTD_out = NULL, wSTD_out = NULL;
char   ss[10000];


   Sa.nLength = sizeof(SECURITY_ATTRIBUTES);
   Sa.bInheritHandle = true;
   Sa.lpSecurityDescriptor = NULL;

   CreatePipe( &rSTD_out, &wSTD_out, &Sa, 0 );
   CreatePipe( &rSTD_in,  &wSTD_in,  &Sa, 0 );

   ZeroMemory( &Pi, sizeof(PROCESS_INFORMATION) );

   ZeroMemory( &Si, sizeof(STARTUPINFO) );
   Si.cb = sizeof(STARTUPINFO);
   Si.wShowWindow = SW_SHOWNORMAL;
   Si.hStdOutput  = wSTD_out;
   Si.hStdInput   = rSTD_in;
   Si.hStdError   = wSTD_out;  // почему-то как раз rSTD_out не задействован здесь... 
   Si.dwFlags    |= STARTF_USESTDHANDLES;

   CreateProcess
	  (
	  "d:\\c1.exe",
	  NULL,
	  NULL,
	  NULL,
	  true,
	  0,  // NORMAL_PRIORITY_CLASS,
	  NULL,
	  NULL,
	  &Si,
	  &Pi
	  );

   ReadFile
	  (
	  rSTD_out,
	  ss,
	  1000,
	  &nRW,
	  NULL
	  );

  M1->Lines->Add(ss);

Последний раз редактировалось Alex11223; 09.05.2017 в 20:44.
COREYCO вне форума Ответить с цитированием
Старый 09.05.2017, 20:29   #29
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну тут оно только один раз читается.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.05.2017, 20:43   #30
COREYCO
Новичок
Джуниор
 
Регистрация: 08.05.2017
Сообщений: 16
По умолчанию

Странно... Вот "это" читает без повторений:
Код:
  for( int i=0; i<10000; i++ )
	  {
	  ReadFile( rSTD_out, &ss[i], 1, &nRW, NULL );
	  if( ss[i] == '\n' ) { ss[i] = '\0';  break; }
	  }

  M1->Lines->Add(ss);
Бред какой-то...

Консоль C1.exe со старта выдаёт небольшую информацию о себе ( 1 строка )...
Потом реагирует на команды, которые знает...
Типа "isready" --> "readyok"...
Ну и в самом конце: "quit" и окно консоли закрывается...
COREYCO вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы в консоли deniscatch Общие вопросы по Java, Java SE, Kotlin 2 04.08.2014 23:38
Запуск и чтение данных из консоли Random2 C++ Builder 0 26.02.2013 21:24
запуск сборки из консоли sergio11 C# (си шарп) 2 01.02.2013 13:39
Запуск приложения из консоли stpdqstns Visual C++ 4 04.11.2012 16:02
Запуск консоли и перенаправление вывода ros.pro Общие вопросы Delphi 1 02.01.2012 18:49