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

NOMBRE

       system - ejecuta una orden del interprete de ordenes (shell)

SINOPSIS

       #include <stdlib.h>

       int system(const char *string);

DESCRIPCI'ON

       system() ejecuta una orden especificada en string llamando a /bin/sh -c
       string, y regresa  despues  de  que  la  orden  se  haya  terminado  de
       ejecutar.   Durante la ejecucion de la orden, se bloqueara SIGCHLD y no
       se hace caso de las senales SIGINT ni SIGQUIT.

VALOR DEVUELTO

       El valor devuelto es -1 en caso de  error  (p.e.  fallo  la  llamada  a
       fork),  y  el  estado  devuelto  por  la orden en caso contrario.  Este
       ultimo valor esta en el  formato  especificado  en  wait(2).   Asi,  el
       codigo  de salida de la orden sera WEXITSTATUS(status).  En caso de que
       /bin/sh no pudiera ejecutarse, el estado de salida sera el de una orden
       que  haga  exit(127).  Si el valor de string es NULL, system() devuelve
       un numero distinto de cero si hay un interprete de ordenes  disponible,
       y cero si no.

       system() no afecta al estado de espera de cualquier otro proceso hijo.

CONFORME A

       C ANSI, POSIX.2, BSD 4.3

OBSERVACIONES

       Como  se  menciono,  system() ignora SIGINT y SIGQUIT. Esto puede hacer
       que los programas que invocan  a  esta  funcion  desde  un  bucle  sean
       ininterrumpibles, a menos que se preocupen ellos mismos de comprobar el
       estado de salida del hijo. P.e.

           while(algo) {
               int ret = system("foo");

               if (WIFSIGNALED(ret) &&
                   (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT))
                       break;
           }

       No llame a system() desde un programa  con  privilegios  suid  o  sgid,
       porque  pudiera  ser  que  se  emplearan  valores extranos para algunas
       variables de entorno para comprometer la integridad del sistema.  En su
       lugar  emplee  la  familia  de  funciones  exec(3),  salvo  execlp(3) o
       execvp(3).  system() , de hecho,  no  funcionara  apropiadamente  desde
       programas  con privilegios suid o sgid en sistemas donde /bin/sh sea la
       version 2 de bash, puesto que bash 2  elimina  los  privilegios  en  el
       arranque.   (Debian usa una version modificada de bash que no hace esto
       cuando es invocado como sh.)

       En realidad no se comprueba si el interprete de  ordenes  /bin/sh  esta
       disponible  o  no;  en  Linux  siempre  se  supone  que  lo esta. ISO C
       especifica la  comprobacion,  pero  POSIX.2  especifica  que  el  valor
       devuelto  siempre  sera  no  cero,  ya que un sistema sin interprete de
       ordenes no es conforme, y esto es lo que se implementa.

       Es posible que una orden del interprete de ordenes  devuelva  127,  asi
       que  ese  codigo  no  es  una  indicacion  segura  de que execve() haya
       fallado.

V'EASE TAMBI'EN

       sh(1), signal(2), wait(2), exec(3)

                              23 septiembre 2001                     SYSTEM(3)