_popen, _wpopen
Создает канал и выполняет команду.
Важно!
Этот API невозможно использовать в приложениях, запускаемых в среде выполнения Windows.Дополнительные сведения см. в статье Функции CRT, которые не поддерживаются с ключом /ZW.
FILE *_popen(
const char *command,
const char *mode
);
FILE *_wpopen(
const wchar_t *command,
const wchar_t *mode
);
Параметры
command
Команда для выполнения.mode
Режим возвращенного потока.
Возвращаемое значение
Возвращает поток, связанный с одним концом создаваемого канала. Другой конец канала связан со стандартным вводом или стандартным выводом, порожденным командой. Функции возвращают NULL при ошибке. Если ошибкой является недопустимый параметр, например, если command или mode являются пустым указателем, или mode не является допустимым режимом, errno устанавливается значение EINVAL. См. раздел Комментариев для получения сведений о допустимых режимах.
Дополнительные сведения об этих и других кодах ошибок см. в разделе _doserrno, errno, _sys_errlist и _sys_nerr.
Заметки
Функция _popen создает канал и асинхронно выполняет порожденную копию процессора команд с помощью указанной строки command. Символьная строка mode определяет требуемый тип доступа следующим образом.
"r"
Вызывающий процесс может считывать стандартный вывод порожденной команды с помощью возвращенного потока."w"
Вызывающий процесс может записывать в стандартный ввод порожденной команды с помощью возвращенного потока."b"
Открыть в бинарном режиме."t"
Открыть в текстовом режиме.Примечание
Если используется в программе Windows, функция _popen возвращает недопустимый указатель файла, из-за которого программа может перестать отвечать._popen работает правильно в консольном приложении.Для создания Windows-приложения, которое перенаправляет ввод и вывод см. Создание дочернего процесса с перенаправленным вводом и выводом в Windows SDK.
_wpopen — двухбайтовая версия _popen; аргумент path для _wpopen - строка двухбайтовых знаков. В остальных случаях поведение _wpopen и _popen идентично.
Универсальное текстовое сопоставление функций
Подпрограмма Tchar.h |
_UNICODE и _MBCS не определены |
_MBCS определено |
_UNICODE определено |
---|---|---|---|
_tpopen |
_popen |
_popen |
_wpopen |
Требования
Подпрограмма |
Обязательный заголовок |
---|---|
_popen |
<stdio.h> |
_wpopen |
<stdio.h> или <wchar.h> |
Дополнительные сведения о совместимости см. в разделе Совместимость.
Библиотеки
Все версии библиотек времени выполнения C.
Пример
// crt_popen.c
/* This program uses _popen and _pclose to receive a
* stream of text from a system process.
*/
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
char psBuffer[128];
FILE *pPipe;
/* Run DIR so that it writes its output to a pipe. Open this
* pipe with read text attribute so that we can read it
* like a text file.
*/
if( (pPipe = _popen( "dir *.c /on /p", "rt" )) == NULL )
exit( 1 );
/* Read pipe until end of file, or an error occurs. */
while(fgets(psBuffer, 128, pPipe))
{
printf(psBuffer);
}
/* Close pipe and print return value of pPipe. */
if (feof( pPipe))
{
printf( "\nProcess returned %d\n", _pclose( pPipe ) );
}
else
{
printf( "Error: Failed to read the pipe to the end.\n");
}
}
Пример результатов выполнения
Этот результат предполагает, что существует только один файл в текущем каталоге с расширением имени файла .c.
Volume in drive C is CDRIVE
Volume Serial Number is 0E17-1702
Directory of D:\proj\console\test1
07/17/98 07:26p 780 popen.c
1 File(s) 780 bytes
86,597,632 bytes free
Process returned 0
Эквивалент в .NET Framework
Неприменимо. Для вызова стандартной функции C используйте PInvoke. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.