PreguntasLinux

Versión Completa: Necesito Yudad par hacer un programa en c que ejecute un comando en el shell
Actualmente estas viendo una versión simplificada de nuestro contenido. Para ver la versión completa en el formato correcto, dale click aquí
Saludos cordiales
Agradeceria mucho su ayuda si alguien conoce alguna forma de hacer que en el programa escrito en c++ ejecute una instruccion en el shell como por ejemplo ls -l y el resultado pueda almacenarlo en una variable para trabajar con estos datos. en el ejemplo que pongo deberia tener en la variable los nombres desplegados con este comando por favor espero su respuesta
Att: David
Por el metodo del menor esfuerzo es el siguiente

Código:
/*
Archivo: ejemplo.c
compilar: gcc -o ejemplo ejemplo.c
ejecutar: ./ejemplo
que hace el programa:  usa system para mandar la salida a un archivo temporal y luego la lee

*/
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *punt;
char texto[50];
char *c;

system("ls -l  >/tmp/ejemplo.log");
punt = fopen("/tmp/ejemplo.log","r");
do
{
c = fgets(texto, 50, punt);
if (c != NULL)
printf("%s",texto);
/* En este lugar la variable texto ya contiene la  primer linea  */
/* en el proximo ciclo tendra lo que dice la linea siguiente */

}
while (c != NULL);
fclose(punt);
return (0);
}

Bueno tenes un par de posibilidades, podes usar ncurses o podes usar popen o system....
este "manual" esta muy Bueno, sería cuestion de que lo leas, es bastante amplio http://www.erlenstar.demon.co.uk/unix/faq_toc.html otra opción puede ser http://pstreams.sourceforge.net/doc/ (este último la verdad no se si funca nunca lo use....).... sino de última podes hacer que c ejecute un script sh y el resultado lo grabe en un archivo (el que lo graba es el script sh), y luego que c lea el archivo, esto es lo que te dejo romperatones.....

si necesitas ayuda con el codigo avisame, mañana te doy una mano, lo que pasa que leí tarde este post 23hs....

saludos...
Hola 1-wink
Lo que intentas hacer se llama tuberias osea pipe.
C /C++ se valen de funciones para interactuar con el shell, sea para leer o escribir en el el 1-wink
Visita http://blog.txipinet.com/index.php/2006/...-linux-vii
Si tienes alguna duda postea que estamos pa servirte.
Exitos
El siguiente código es una muestra clara de cómo se puede hacer una llamada utilizando tuberías y procesos hijo, de forma sencillísima:
---------------------------------------------------
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <limits.h>

#define SIZE PIPE_BUF

int main(int argc, char *argv[])
{
  FILE *file;
  char *command= "ls .";
  char buffer[SIZE];

  file=popen( command, "r" );

  while( !feof( file ) )
  {
    fscanf( file, "%s", &buffer );
    printf( "%s\n", buffer );
  }

  pclose( file );

  return 0;
}
----------------------------------------------------
Nuestro programa simplemente crea un proceso hijo que será reemplazado por una llamada al comando ?ls .?, y se nos devolverá un puntero a un fichero que será el resultado de ese comando. Leemos ese fichero y lo escribimos por pantalla. Al finalizar, cerramos la tubería con pclose().

Lee tambien el post anterior y especifico web.
Hola

Bueno io insisto si deseas trabajar con shell se puede con la funcion system() y sprintf(), sin embargo esto es para C y no se si C++ tamb la tenga, si la tiene entonces con esas 2 funciones puedes mandar tanto cadenas de caracteres como enteros a un shell, ahora si lo que kieres es alamcenar el resultado solo se me ocurre guardandolos en un txt, por ejemplo:
ls -l >> archivo.txt

saludos 1-grin
URLs de Referencia