SoloCodigo

Programación General => C/C++ => Mensaje iniciado por: nagitarami en Sábado 3 de Abril de 2010, 02:40

Título: creando una shell
Publicado por: nagitarami en Sábado 3 de Abril de 2010, 02:40
bueno amigos poco a poco añadire unos codigos ah medida q realice mi proyecto ah fin de saber como se usan las funciones y no tengo experiencia en sus llamadas y sintaxis por ejemplo

Código: C
  1. #include <unistd.h>
  2. int gethostname(char *name, size_t namelen); 
  3.  
claro esto es basico pero empiezo a leer sus funciones y seria bueno agregar ejemplos  :lol:
bueno me olvide agregar que uso el sistema operativo UBUNTU la ultima version (en el momento que publico este mensaje estoy en la version 9.10  ^_^  y uso el compilador de gcc 4.4.1)
Título: Re: creando una shell
Publicado por: su - en Domingo 4 de Abril de 2010, 21:55
:) Ejemplo:
Código: C
  1. #include <unistd.h>
  2. #include <stdio.h>
  3. int main( void ) {
  4.     char nombre[50];
  5.     int error = gethostname( nombre, sizeof(nombre) );
  6.     if ( error < 0 ) {
  7.         fprintf(stderr, "No se puede saber el nombren");
  8.         exit( -1 );
  9.     }
  10.     printf( "Hostname: %sn", nombre);
  11.     return 0;
  12. }
  13.  
Título: Re: creando una shell
Publicado por: nagitarami en Jueves 8 de Abril de 2010, 01:43
hola amigos,y especialmente al mostro de la programacion quien me ayudo como usar la funcion, me sirvio de mucho, ahora estoy intentando leer los comandos o las instrucciones que el usuario colocara en la shell, pero tengo dudas de como usar la funciones strdup() y strsep() ambas del lenguaje C de la libreria  string.h, la unica cosa en concreto que encontre en la internet es esto..
Código: C
  1. #include <string.h>
  2. char *strdup(const char *s);
  3. char *strsep(char **stringp, const char *delim);
  4.  
<_<  eh buscado por la internet pero muchos ejemplo encadenados a la funcion que no permite dar un claro uso

gracias de antemano... :beer:  :lol:

su -
login:
password:

xD!...
Título: Re: creando una shell
Publicado por: su - en Jueves 8 de Abril de 2010, 02:24
strdup (http://www.opengroup.org/onlinepubs/009695399/functions/strdup.html) duplica strings  :rolleyes:  es similar a strcpy. (http://stackoverflow.com/questions/252782/strdup-what-does-it-do-in-c)
strsep : leer esto (http://www.gnu.org/s/libc/manual/html_node/Finding-Tokens-in-a-String.html)
Título: Re: creando una shell
Publicado por: nagitarami en Jueves 8 de Abril de 2010, 07:58
Bueno despues de arduo esfuerzo  -_-  logre  saber como usar las funciones strdup() y strsep()  en tiempo record  :lol:  me costo un poco por la sintaxis y la forma como gobierna los tokens a diferencia del strtok  :(   bueh, tengo un problemilla de como limpiar un struct definido por ejemplo:
Código: C
  1. typedef struct
  2. {
  3.    char *nombre[12];
  4.    int tam;
  5. }objeto;
  6. free(objeto);
  7.  
una vez que asigno los datos a las variables, jugar con ellas necesito limpiarlo...para volver a usarlo, eh usado las funcion clean(objeto) o free(objeto) pero no funciona, existira otro metodo favorable a mi peticion?  :brickwall:
Título: Re: creando una shell
Publicado por: su - en Viernes 9 de Abril de 2010, 02:46
Con algo como:
Código: C
  1. typedef struct {
  2.    char *nombre[12];
  3.    int tam;
  4. } objeto;
  5. ...
  6. objeto *miobjeto
  7.  
Hacemos:
Código: C
  1. void DestruirObjeto( objeto *miobjeto ) {
  2.     free( miobjeto->nombre );
  3.    miobjeto->tam = 0;
  4. }
  5.  
Título: Re: creando una shell
Publicado por: nagitarami en Domingo 11 de Abril de 2010, 02:03
bueno gracias por su ayuda en el foro y a -su xD, bueno ahora tengo un problemita.. y llevo algo de horas, necesito usar la funcion access().. para verificar si existe un un archivo en en el directorio $PATH  no eh podido acceder a ella no se si x error sintactico o por permisos de acceso al directorio... si alguien me ayuda con un ejemplo estaria agradecido... bueno eh usados otras struct dirent y struct stat para poder buscar un archivo en una carpeta especifica... y me aparece una lista de archivos pero llegar a ella para validar que existe o no, no eh podido...  :mellow:   :no:   :ouch:
Título: Re: creando una shell
Publicado por: nagitarami en Lunes 12 de Abril de 2010, 20:28
bueno con el tiempo solucione el problema , la funcion access() es una validacion que se toma en cuenta el camino junto con el archivo que se va a utilizar + el modo de consulta que vamos a realizar sobre ese archivo entre ellas tenemos:
R_OK W_OK  X_OK S_OK, ahora puedo acceder gracias a ello usando ese camino, mi pregunta ahora es lo siguiente, segun mi sistema operativo linux,quiero saber que funciones son propias de la shell y cuales son invocadas en un camino.. por ejemplo CD es un comando propio de la shell, habra otro comandos? como saberlo?  :alien:
Título: Re: creando una shell
Publicado por: nagitarami en Lunes 12 de Abril de 2010, 23:41
añadiendo otra cosa necesito saber si un execv(PATH,LINEAORDENES) puede llamar una funcion de si misma, por ejemplo

tengo un archivo compilado de esa forma
gcc hola.c -o hola
y el archivo hola.c tiene el codigo donde se esta usando el execv lo ejecuto con la linea de codigo
./hola
me pide que coloque la instruccion y coloco ./hola para volverlo llamarlo recursivamente, esto es posible?