_popen, _wpopen

From RAD Studio
Jump to: navigation, search

Go Up to stdio.h Index


Header File

stdio.h

Category

Input/output Routines

Prototype

FILE *_popen (const char *command, const char *mode);

FILE *_wpopen (const wchar_t *command, const wchar_t *mode);

Description

Creates a command processor pipe.

The _popen function creates a pipe to the command processor. The command processor is executed asynchronously, and is passed the command line in command. The mode string specifies whether the pipe is connected to the command processor's standard input or output, and whether the pipe is to be opened in binary or text mode.

The mode string can take one of the following values:

Value Description

rt

Read child command's standard output (text).

rb

Read child command's standard output (binary).

wt

Write to child command's standard input (text).

wb

Write to child command's standard input (binary).



The terminating t or b is optional; if missing, the translation mode is determined by the external variable _fmode.

Use the _pclose function to close the pipe and obtain the return code of the command.

Return Value

On success, _popen returns a FILE pointer that can be used to read the standard output of the command, or to write to the standard input of the command, depending on the mode string.

On error, it returns NULL.

Example

/* this program initiates a child process to run the dir command
   and pipes the directory listing from the child to the parent.
*/
#include <stdio.h>     // popen() pclose() feof() fgets() puts()
#include <string.h>    // strlen()
int main( )
{
  FILE* handle;        // handle to one end of pipe
  char message[256];   // buffer for text passed through pipe
  int status;          // function return value
  // open a pipe to receive text from a process running "DIR"
  handle = _popen("dir /b", "rt");
  if (handle == NULL)
  {
    perror("_popen error");
  }
  // read and display input received from the child process
  while (fgets(message, sizeof(message), handle))
  {
    fprintf(stdout, message);
  }
  // close the pipe and check the return status
    status = _pclose(handle);
  if (status == -1)
  {
    perror("_pclose error");
  }
  return(0);
}

Portability

POSIX Win32 ANSI C ANSI C++

_popen

+

_wpopen

NT only