• Viernes 8 de Noviembre de 2024, 20:46

Autor Tema:  creando una shell  (Leído 2272 veces)

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
creando una shell
« en: Sábado 3 de Abril de 2010, 02:40 »
0
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)

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: creando una shell
« Respuesta #1 en: Domingo 4 de Abril de 2010, 21:55 »
0
:) 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.  
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: creando una shell
« Respuesta #2 en: Jueves 8 de Abril de 2010, 01:43 »
0
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.  
&lt;_&lt;  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!...

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: creando una shell
« Respuesta #3 en: Jueves 8 de Abril de 2010, 02:24 »
0
strdup duplica strings  :rolleyes:  es similar a strcpy.
strsep : leer esto
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: creando una shell
« Respuesta #4 en: Jueves 8 de Abril de 2010, 07:58 »
0
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:

su -

  • Moderador
  • ******
  • Mensajes: 2349
    • Ver Perfil
Re: creando una shell
« Respuesta #5 en: Viernes 9 de Abril de 2010, 02:46 »
0
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.  
*******PELIGRO LEE ESTO!!*******

There is no place like 127.0.0.1

Conecto luego existo, no conecto luego insisto.

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: creando una shell
« Respuesta #6 en: Domingo 11 de Abril de 2010, 02:03 »
0
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:

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: creando una shell
« Respuesta #7 en: Lunes 12 de Abril de 2010, 20:28 »
0
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:

nagitarami

  • Nuevo Miembro
  • *
  • Mensajes: 19
  • Nacionalidad: pe
    • Ver Perfil
Re: creando una shell
« Respuesta #8 en: Lunes 12 de Abril de 2010, 23:41 »
0
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?