Provided by: manpages-es_1.55-10_all bug

NOMBRE

       popen, pclose - E/S de procesos

SINOPSIS

       #include <stdio.h>

       FILE *popen(const char *orden, const char *tipo);

       int pclose(FILE *flujo);

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. El argumento tipo es un puntero a una cadena
       terminada en cero que debe ser o "r" para lectura o "w" para escritura.

       El valor devuelto por popen() es un flujo normal de E/S estándar a todos los efectos salvo
       en  que  debe  cerrarse  con  pclose()  en  vez  de  con fclose().  Escribir a dicho flujo
       significa escribir en la entrada estándar de la orden; la salida estándar de la  orden  es
       la  misma  que  la  del proceso que llamó a popen(), a menos que la propia orden modifique
       esto. De modo análogo, leer de un flujo de `popen' implica leer de la salida  estándar  de
       la  orden,  y  la  entrada estándar de la orden es la misma que la del proceso que llamó a
       popen.

       Observe que los flujos de salida de popen son completamente tamponados (buffered) de forma
       predeterminada.

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

VALOR DEVUELTO

       La función popen devuelve NULL si las llamadas a fork(2) o a pipe(2) fallan, o si no puede
       reservar memoria.

       La función pclose devuelve -1 si wait4 devuelve un error o se detecta algún otro error.

ERRORES

       La  función  popen  no  asigna  un  valor  a  errno si falla la reserva de memoria. Si las
       funciones subyacentes fork() o pipe() fallan, a errno se le asigna un valor apropiado.  Si
       el argumento mode 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.

CONFORME A

       POSIX.2

FALLOS

       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.

HISTORIA

       Una función popen() y otra pclose() apareció en UNIX de AT&T Versión 7.

VÉASE TAMBIÉN

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