SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: Grilli en Jueves 2 de Noviembre de 2006, 09:42

Título: Preguntita Sobre El System()
Publicado por: Grilli en Jueves 2 de Noviembre de 2006, 09:42
Hola, muy wenas, tengo una preguntita sobre el system().

Estoy haciendo un mini-programita para la gestion de paquetes en Linux, y quisiera saber si hay alguna forma de guardar en un puntero lo que la consola devuelve enviandole un comando. Os pongo un ejemplo:

Tengo el siguiente arbol:
/home/grilli/
|---programacion
|---descargas
|---programas

Quisiera que me guardara en un puntero el contenido de la carpeta /home/grilli/.

Lo he intentado de la forma que podria haber sido mas sencilla:
Código: Text
  1. #include <stdio.h>
  2.  
  3. int main(){
  4.    char *lista;
  5.    lista = system("ls ~");
  6.    return 0;
  7. }
  8.  

Pero el problema es que la funcion system() es de tipo int.

Alguien sabe si hay alguna forma de hacerlo?

Saludos ;)
Título: Re: Preguntita Sobre El System()
Publicado por: Eternal Idol en Jueves 2 de Noviembre de 2006, 10:04
Podes redirigir la salida a un archivo o incluso mejor a un pipe.
Título: Re: Preguntita Sobre El System()
Publicado por: Grilli en Jueves 2 de Noviembre de 2006, 10:17
Anda, pues ahora que lo dices, tienes razon. Joder, vaya cagada :P Muchas gracias tio :)

Y... ahora que lo mencionas... que es un pipe?
Título: Re: Preguntita Sobre El System()
Publicado por: Eternal Idol en Jueves 2 de Noviembre de 2006, 10:23
Cita de: "Grilli"
Anda, pues ahora que lo dices, tienes razon. Joder, vaya cagada :P Muchas gracias tio :)

Y... ahora que lo mencionas... que es un pipe?
Pipe significa tuberia en Ingles y es una zona de memoria compartida que se usa para comunicacion entre procesos. En este caso si creas un pipe y en vez de escribir en consola se escribe en el pipe podrias hacer algo como:

Código: Text
  1.  
  2.   //crear pipe
  3.   //ejecutar y redirigir salida al pipe creado
  4.   char *data;
  5.   //leer del pipe
  6.   *data = 0;
  7.  
  8.  

Asi te ahorras el trabajo, innecesario en este caso, con archivos.
Título: Re: Preguntita Sobre El System()
Publicado por: Grilli en Jueves 2 de Noviembre de 2006, 11:04
Mmmmm... no he pillado lo que es un pipe, pero bueno, da igual, ya tendre tiempo de aprenderlo. Ahora lo que me surgen son otros problemas.

Como puedo enviar al system el contenido de un puntero? Me explico:

Código: Text
  1. #include <stdio.h>
  2. #include <strings.h>
  3.  
  4. int main(){
  5.    char *directorio;
  6.    printf("Escribe la ruta que quieres visualizar: ");
  7.    scanf("%s", directorio);
  8.    directorio = "ls " + directorio //Esta es la primera linea que no me sale bien
  9.    system("directorio"); //Esta linea es la otra que no se como hacer
  10. }
  11.  
  12.  
Título: Re: Preguntita Sobre El System()
Publicado por: Eternal Idol en Jueves 2 de Noviembre de 2006, 11:25
Código: Text
  1.  
  2.    char *directorio;
  3.   printf("Escribe la ruta que quieres visualizar: ");
  4.   scanf("%s", directorio);
  5.  
  6.  

Aca ya tenemos el primer problema ... o usas memoria dinamica con malloc/new para directorio (ahora su valor es indefinido y daria una excepcion) o usas una variable local en la pila (char directorio[256] por ejemplo).

Código: Text
  1.  
  2. directorio = "ls " + directorio //Esta es la primera linea que no me sale bien\
  3.  
  4.  

Esto es un conjunto de bytes consecutivos y no podes usar el + asi como asi; tenes que usar las funciones str*. Igual tendrias que usar otra variable, donde podes empezar con strcpy para copiarle el "ls " y despues seguir con strcat para agregarle el contenido de directorio. Por ejemplo si tuvieramos es variable llamada dir despues hariamos:

Código: Text
  1.  
  2.  system(dir);
  3.  
  4.  
Título: Re: Preguntita Sobre El System()
Publicado por: Grilli en Jueves 2 de Noviembre de 2006, 14:39
Ya esta, ya he arreglado los problemillas que tenia. Muchas gracias por tu ayuda ;)