Поделиться через


_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. Дополнительные сведения см. в разделе Примеры вызовов неуправляемого кода.

См. также

Ссылки

Управление процессами и средой

_pclose

_pipe