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'ON

       La  funcion  popen()  inicia un proceso creando una tuberia, llamando a
       fork(2) para crear el proceso y ejecutando  el  interprete  de  ordenes
       (shell).   Puesto  que una tuberia es unidireccional por definicion, el
       argumento tipo solo 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  linea  de  orden del shell. Esta orden se pasa a /bin/sh
       precedida de la opcion -c; si se necesita interpretar la linea, 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  estandar  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
       estandar de la orden; la salida estandar de la orden es la misma que la
       del proceso que llamo a popen(), a menos que la propia orden  modifique
       esto.  De  modo analogo, leer de un flujo de `popen' implica leer de la
       salida estandar de la orden, y la entrada estandar de la  orden  es  la
       misma que la del proceso que llamo a popen.

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

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

VALOR DEVUELTO

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

       La funcion pclose devuelve -1 si wait4 devuelve un error o  se  detecta
       algun otro error.

ERRORES

       La  funcion  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 condicion, 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  estandar  de  una  orden abierta para lectura
       comparte su puntero de posicion con el proceso que llamo a popen(),  si
       el  proceso  original ha hecho una lectura tamponada, la posicion 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  ultimo  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  unica
       pista es un estado de salida 127.

HISTORIA

       Una funcion popen() y otra pclose() aparecio en UNIX de AT&T Version 7.

V'EASE TAMBI'EN

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