Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

pipes

2.6K
02 февраля 2005 года
NinthBit
43 / / 31.01.2005
Задача: из приложения ( gui ) управлять досовской программой ( и ввод и вывод).
Проблема: если пользоваться _popen() для консольной программы все работает замечательно, как только используется то же самое в gui возникают ошибки, _popen() не возвращает хэндла.
В документации не говорится о каких бы то ни было ограничениях на использовние. Может следует воспользоваться какой-нибудь другой функцией? Или же что-то неправильного в моем коде?
child.exe - печатает строку текста и ждет нажатия любой клавиши для завершения
Цитата:

__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
AnsiString buf;
FILE* handle; // handle to one end of pipe
char message[5]; // buffer for text passed through pipe

// open a pipe to receive text from a process running "DIR"

handle = _popen("child.exe", "rt");
// в этой точке дебаг показывает handle = NULL
if (handle == NULL)
{
this->Memo1->Lines->Add("_popen error");
return;
}

// read and display input received from the child process
while (fgets(message, sizeof(message), handle))
{
buf.printf( message);
this->Memo1->Lines->Add(buf);
}

}

1
08 февраля 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by NinthBit

В документации не говорится о каких бы то ни было ограничениях на использовние. Может следует воспользоваться какой-нибудь другой функцией?


Я не знаю какой документацией пользуешься ты - но в моей сказанно четко и однозначно:

Цитата:
The _popen function returns an invalid file handle, if used in a Windows program, that will cause the program to hang indefinitely. _popen works properly in a Console application. To create a Windows application that redirects input and output, read the section "Creating a Child Process with Redirected Input and Output" in the Win32 SDK.


В вольном переводе с буржуйского - не используйте эту функцию в виндоус-программах, а используйте для этих целей другие CreatePipe,CreateProcess. Хотя конечно можно не считать это "ограничением на использование".

2.6K
10 февраля 2005 года
NinthBit
43 / / 31.01.2005
Спасибо огромное!

P.S.:
Документация к BCB 6.0 прямо в статье про _popen() у меня, я еще раз проверил, ничего про это не сказано.
1
10 февраля 2005 года
kot_
7.3K / / 20.01.2000
Цитата:
Originally posted by NinthBit
Спасибо огромное!

P.S.:
Документация к BCB 6.0 прямо в статье про _popen() у меня, я еще раз проверил, ничего про это не сказано.


В билдеровском хелпе просто сказано - для этих функций нет эквивалента в Win32.

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог