La era de la informatica

Tuesday, February 27, 2007

SHell de P: Para Windows

Hola, en la anterior entrada preguntaba si se os ocurría como modificar el SHell de P para que funcionara en Windows. Después de ver las funciones para creación de procesos y manejo de hilos en la anterior entrada, la modificación del shell para que funcionase en windows es muy sencilla, teniendo en cuenta las siguientes diferencias que nos forzarán a hacer modificaciones:

- No podemos usar la función fork() ya que no existe en la API de win32. Para emular la llamada de fork() y exec que tenemos en el shell para UNIX, vamos a crear un hilo con la función CreateThread, y la función que ejecute el hilo va a utilizar la función System, que es la forma mas sencilla de ejecutar otro programa.

- Cambia el manejo de señales. Pero lo bueno es que se vuelve mas sencillo. La función signal hace que podamos especificar una función de procesado de la señal. La función de procesado de la señal es equivalente a la de UNIX.

- No necesitamos algunas de las funciones propias del shell que si necesitabamos en UNIX. Por ejemplo, no necesitamos "export" para variables de entorno, ni "cd" para cambio de directorio, estas 2 se ejecutarán en el proceso hijo como cualquier otro programa. Solamente vamos a dejar "exit" para terminar la ejecución del programa y "r" para reejecutar un programa.

- Para "pintar" el "prompt" usaremos la función _getcwd que mete en un buffer de caracteres el path completo. De esta forma coseguimos el "look" propio de ms-dos.

Solo con estos cambios nos queda un código aún más sencillo que para UNIX. El código es el siguiente:

shwindows.c
shwindows.h
Makefile-windows
shwindows.zip

Espero vuestros comentarios.

(Nota: no lo he probado mucho, por ejemplo aunque permitimos ejecutar procesos en modo "background" no he probado que funcione correctamente. Si os falla decidmelo y a ver si lo resolvemos entre todos :))

1 Comments:

  • Hola amigo muchas gracias por tu codigo pero tengo un problema qeu me sale en todos los codigos que andube buscando es:
    Cannot open include file: 'unistd.h'

    By Anonymous Anonymous, at 5:43 AM  

Post a Comment

<< Home