La Web del Programador: Comunidad de Programadores
 
    Pregunta:  23139 - COMO HAGO QUE UN CGI EN C EJECUTE UN COMANDO
Autor:  Davis PZ
Hola!
Si trabajo un CGI escrito en C, compilado en linux.
1) Como puedo capturar la entrada estandar?
2) Como puedo ejecutar un comando y capturar su resultado para luego enviarlo como respuesta en un HTML??/

  Respuesta:  jaume dominguez
Hola!

No puedo imaginar cuál es tu cometido, pero sí sé como capturar la entrada estándar. De hecho es muy fácil. La entrada estándar en linux es exactamente igual que un fichero y la puedes tratar como tal. Cada vez que ejecutas cualquier programa tienes asociado a él 3 ficheros que están listos para usarse en cualquier momento. Son la entrada estandar, la salida estandar y el error estandar, por este orden.

Cuando te creas un descriptor de fichero (con: fd = open("nombrefich", OPCIONES); ) en realidad el descriptor de fichero es simplemente un int que indica el índice de fichero al que te estás dirigiendo. Al fd se le asigna el índice más pequeño disponible (que en un programa normal sería el 3 puesto que 0 se usa para la entrada estándar, 1 para la salida estándar y 2 para el error estándar).

Si lo que quieres es leer de la entrada estándar deberás de usar:
read(0, &variable, n_bytes);
Para capturar en la variable el número de bytes que quieres leer. Lo normal es que escribas
read(0, &variable, sizeof(variable));

RECUERDA EL & antes de la variable o no funcionará

Nota que puedes usar esta técnica para redirigir la salida de un programa a la entrada del otro, esto es muy interesante sobretodo si tienes pequeños programas que resuelven un programa específico y sacan el resultado por pantalla y quieres que el resultado de ellos sea la entrada de otros.

Vinga! Salut i república!

ya me cuentas como te ha ido.

Adeu!

  Respuesta:  Antonio Pérez Garcia
Creo que lo que quieres es que al CGI se le puedan enviar parámetros y eso se puede lograr utilizando la variable del enviroment QUERY_STRING y dentro del programa la obtienes con getenv( "QUERY_STRING" ).
Puedes ejecutar un comando con la función system( "<Comando>" ) y redireccionar la salida para un fichero temporal luego abres dicho fichero y ya tienes lo que vas a poner en el HTML.
Si no te satisface la respuesta házmelo saber a mi email.