pclose man page on Archlinux

Man page or keyword search:  
man Server   11224 pages
apropos Keyword Search (all sections)
Output format
Archlinux logo
[printable version]

PCLOSE(3P)		   POSIX Programmer's Manual		    PCLOSE(3P)

PROLOG
       This  manual  page is part of the POSIX Programmer's Manual.  The Linux
       implementation of this interface may differ (consult the	 corresponding
       Linux  manual page for details of Linux behavior), or the interface may
       not be implemented on Linux.

NAME
       pclose — close a pipe stream to or from a process

SYNOPSIS
       #include <stdio.h>

       int pclose(FILE *stream);

DESCRIPTION
       The pclose() function shall close a stream that was opened by  popen(),
       wait for the command to terminate, and return the termination status of
       the process that was running the command	 language  interpreter.	  How‐
       ever,  if  a  call  caused  the termination status to be unavailable to
       pclose(), then pclose() shall return −1 with errno set to  [ECHILD]  to
       report  this situation. This can happen if the application calls one of
       the following functions:

	*  wait()

	*  waitpid() with a pid argument less than or equal to 0 or  equal  to
	   the process ID of the command line interpreter

	*  Any	other function not defined in this volume of POSIX.1‐2008 that
	   could do one of the above

       In any case, pclose() shall not return before the child process created
       by popen() has terminated.

       If  the command language interpreter cannot be executed, the child ter‐
       mination status returned by pclose() shall be as if  the	 command  lan‐
       guage interpreter terminated using exit(127) or _exit(127).

       The  pclose()  function	shall not affect the termination status of any
       child of the calling process other than the one created by popen()  for
       the associated stream.

       If the argument stream to pclose() is not a pointer to a stream created
       by popen(), the result of pclose() is undefined.

RETURN VALUE
       Upon successful return, pclose() shall return the termination status of
       the  command  language interpreter. Otherwise, pclose() shall return −1
       and set errno to indicate the error.

ERRORS
       The pclose() function shall fail if:

       ECHILD The status of the	 child	process	 could	not  be	 obtained,  as
	      described above.

       The following sections are informative.

EXAMPLES
       None.

APPLICATION USAGE
       None.

RATIONALE
       There  is  a  requirement  that	pclose()  not  return before the child
       process terminates. This is intended to disallow	 implementations  that
       return  [EINTR]	if  a  signal  is  received while waiting. If pclose()
       returned before the child terminated, there would be  no	 way  for  the
       application  to	discover  which	 child	used to be associated with the
       stream, and it could not do the cleanup itself.

       If the stream pointed to by stream was not created by popen(), histori‐
       cal  implementations  of	 pclose() return −1 without setting errno.  To
       avoid requiring pclose() to set errno in this case, POSIX.1‐2008	 makes
       the  behavior  unspecified.  An	application should not use pclose() to
       close any stream that was not created by popen().

       Some historical implementations of pclose() either block or ignore  the
       signals SIGINT, SIGQUIT, and SIGHUP while waiting for the child process
       to terminate. Since this behavior is not	 described  for	 the  pclose()
       function	 in  POSIX.1‐2008,  such  implementations  are not conforming.
       Also, some historical implementations return [EINTR]  if	 a  signal  is
       received, even though the child process has not terminated. Such imple‐
       mentations are also considered non-conforming.

       Consider, for example, an application that uses:

	   popen("command", "r")

       to start command, which is part of the  same  application.  The	parent
       writes  a  prompt  to its standard output (presumably the terminal) and
       then reads from the popen()ed stream. The child reads the response from
       the user, does some transformation on the response (pathname expansion,
       perhaps) and writes the result  to  its	standard  output.  The	parent
       process	reads  the  result  from the pipe, does something with it, and
       prints another prompt. The cycle repeats. Assuming that both  processes
       do appropriate buffer flushing, this would be expected to work.

       To  conform to POSIX.1‐2008, pclose() must use waitpid(), or some simi‐
       lar function, instead of wait().

       The code sample below illustrates how the pclose()  function  might  be
       implemented on a system conforming to POSIX.1‐2008.

	   int pclose(FILE *stream)
	   {
	       int stat;
	       pid_t pid;

	       pid = <pid for process created for stream by popen()>
	       (void) fclose(stream);
	       while (waitpid(pid, &stat, 0) == -1) {
		   if (errno != EINTR){
		       stat = -1;
		       break;
		   }
	       }
	       return(stat);
	   }

FUTURE DIRECTIONS
       None.

SEE ALSO
       fork(), popen(), wait()

       The Base Definitions volume of POSIX.1‐2008, <stdio.h>

COPYRIGHT
       Portions	 of  this text are reprinted and reproduced in electronic form
       from IEEE Std 1003.1, 2013 Edition, Standard for Information Technology
       --  Portable  Operating	System	Interface (POSIX), The Open Group Base
       Specifications Issue 7, Copyright (C) 2013 by the Institute of Electri‐
       cal  and	 Electronics  Engineers,  Inc  and  The	 Open Group.  (This is
       POSIX.1-2008 with the 2013 Technical Corrigendum	 1  applied.)  In  the
       event of any discrepancy between this version and the original IEEE and
       The Open Group Standard, the original IEEE and The Open Group  Standard
       is  the	referee document. The original Standard can be obtained online
       at http://www.unix.org/online.html .

       Any typographical or formatting errors that appear  in  this  page  are
       most likely to have been introduced during the conversion of the source
       files to man page format. To report such errors,	 see  https://www.ker‐
       nel.org/doc/man-pages/reporting_bugs.html .

IEEE/The Open Group		     2013			    PCLOSE(3P)
[top]

List of man pages available for Archlinux

Copyright (c) for man pages and the logo by the respective OS vendor.

For those who want to learn more, the polarhome community provides shell access and support.

[legal] [privacy] [GNU] [policy] [cookies] [netiquette] [sponsors] [FAQ]
Tweet
Polarhome, production since 1999.
Member of Polarhome portal.
Based on Fawad Halim's script.
....................................................................
Vote for polarhome
Free Shell Accounts :: the biggest list on the net