Provided by: manpages-es_1.55-3_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)