Scroll to navigation

POPEN(3) Manual del Programador de Linux POPEN(3)

NOMBRE

popen, pclose - flujo desde o hacia un proceso

SINOPSIS

#include <stdio.h>
FILE *popen(const char *orden, const char *tipo);
int pclose(FILE *flujo);

Requisitos de Macros de Prueba de Características para glibc (véase feature_test_macros(7)):

popen(), pclose():

_POSIX_C_SOURCE >= 2
|| /* Glibc versions <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

DESCRIPCIÓN

La función popen() inicia un proceso creando una tubería, llamando a fork(2) para crear el proceso y ejecutando el intérprete de órdenes (shell). Puesto que una tubería es unidireccional por definición, el argumento tipo sólo puede especificar lectura o escritura, pero no ambos; el flujo resultante es respctivamente de lectura o escritura exclusiva.

El argumento orden es un puntero a una cadena terminada en cero que contiene una línea de orden del shell. Esta orden se pasa a /bin/sh precedida de la opción -c; si se necesita interpretar la línea, esto lo hace el shell.

The type argument is a pointer to a null-terminated string which must contain either the letter 'r' for reading or the letter 'w' for writing. Since glibc 2.9, this argument can additionally include the letter 'e', which causes the close-on-exec flag (FD_CLOEXEC) to be set on the underlying file descriptor; see the description of the O_CLOEXEC flag in open(2) for reasons why this may be useful.

The return value from popen() is a normal standard I/O stream in all respects save that it must be closed with pclose() rather than fclose(3). Writing to such a stream writes to the standard input of the command; the command's standard output is the same as that of the process that called popen(), unless this is altered by the command itself. Conversely, reading from the stream reads the command's standard output, and the command's standard input is the same as that of the process that called popen().

Note that output popen() streams are block buffered by default.

La función pclose() espera que el proceso asociado termine, y devuelve el estado de salida de la orden como el devuelto por wait4(2).

VALOR DEVUELTO

popen(): on success, returns a pointer to an open stream that can be used to read or write to the pipe; if the fork(2) or pipe(2) calls fail, or if the function cannot allocate memory, NULL is returned.

pclose(): on success, returns the exit status of the command; if wait4(2) returns an error, or some other error is detected, -1 is returned.

Both functions set errno to an appropriate value in the case of an error.

ERRORES

La función popen() no asigna un valor a errno si falla la reserva de memoria. Si las funciones subyacentes fork(2) o pipe(2) fallan, a errno se le asigna un valor apropiado. Si el argumento tipo es incorrecto y se detecta esta condición, a errno se le asigna el valor EINVAL.

Si pclose() no puede obtener el estado del hijo, se asigna a errno el valor ECHILD.

ATRIBUTOS

Para obtener una explicación de los términos usados en esta sección, véase attributes(7).

Interfaz Atributo Valor
popen(), pclose() Seguridad del hilo Multi-hilo seguro

CONFORME A

POSIX.1-2001, POSIX.1-2008.

The 'e' value for type is a Linux extension.

NOTAS

Note: carefully read Caveats in system(3).

ERRORES

Puesto que la entrada estándar de una orden abierta para lectura comparte su puntero de posición con el proceso que llamó a popen(), si el proceso original ha hecho una lectura tamponada, la posición en la entrada de la orden puede no ser la esperada. De forma similar, la salida de una orden abierta para escritura puede resultar mezclada con la del proceso original. Esto último puede evitarse llamando a fflush(3) antes de a popen().

Un fallo al ejecutar el shell es indistinguible de un fallo del shell al ejecutar la orden, o una salida inmediata de la orden. La única pista es un estado de salida 127.

VÉASE TAMBIÉN

sh(1), fork(2), pipe(2), wait4(2), fclose(3), fflush(3), fopen(3), stdio(3), system(3)

COLOFÓN

Esta página es parte de la versión 5.10 del proyecto Linux man-pages. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en https://www.kernel.org/doc/man-pages/.

TRADUCCIÓN

La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es>, Juan Piernas <piernas@ditec.um.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.

15 Septiembre 2017 GNU