_popen, _wpopen
Collapse the table of content
Expand the table of content
Important This document may not represent best practices for current development, links to downloads and other resources may no longer be valid. Current recommended version can be found here. ArchiveDisclaimer

_popen, _wpopen 

Creates a pipe and executes a command.

FILE *_popen(
   const char *command,
   const char *mode 
FILE *_wpopen(
   const wchar_t *command,
   const wchar_t *mode 



Command to be executed.


Mode of the returned stream.

Returns a stream associated with one end of the created pipe. The other end of the pipe is associated with the spawned command's standard input or standard output. The functions return NULL on an error. If the error is an invalid parameter, such as if command or mode is a null pointer, or mode is not a valid mode, errno is set to EINVAL. See the Remarks section for valid modes.

For information about these and other error codes, see _doserrno, errno, _sys_errlist, and _sys_nerr.

The _popen function creates a pipe and asynchronously executes a spawned copy of the command processor with the specified string command. The character string mode specifies the type of access requested, as follows.


The calling process can read the spawned command's standard output using the returned stream.


The calling process can write to the spawned command's standard input using the returned stream.


Open in binary mode.


Open in text mode.


If used in a Windows program, the _popen function returns an invalid file pointer that causes the program to stop responding indefinitely. _popen works properly in a console application. To create a Windows application that redirects input and output, see Creating a Child Process with Redirected Input and Output in the Platform SDK.

_wpopen is a wide-character version of _popen; the path argument to _wpopen is a wide-character string. _wpopen and _popen behave identically otherwise.

Generic-Text Routine Mappings
Tchar.h routine _UNICODE and _MBCS not defined _MBCS defined _UNICODE defined





Routine Required header Compatibility



Windows 95, Windows 98, Windows 98 Second Edition, Windows Millennium Edition, Windows Millennium Edition, Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003


<stdio.h> or <wchar.h>

Windows NT 4.0, Windows 2000, Windows XP Home Edition, Windows XP Professional, Windows Server 2003

For more compatibility information, see Compatibility in the Introduction.


All versions of the C run-time libraries.

// 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))

   /* Close pipe and print return value of pPipe. */
   if (feof( pPipe))
     printf( "\nProcess returned %d\n", _pclose( pPipe ) );
     printf( "Error: Failed to read the pipe to the end.\n");

This output assumes that there is only one file in the current directory with a .c file name extension.

 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

Not applicable. To call the standard C function, use PInvoke. For more information, see Platform Invoke Examples.

© 2016 Microsoft