Este proyecto consiste en el desarrollo de una Mini Shell (msh) funcional desarrollada en lenguaje C para la asignatura de Sistemas Operativos. La shell es capaz de ejecutar comandos internos y externos, gestionar tuberías (pipes), redirecciones de entrada/salida y control de trabajos (jobs) en segundo plano.
- Adam El Kassmi Serroukh
- Víctor Omar Llantoy Núñez del Arco
La shell permite la ejecución de cualquier comando disponible en el sistema (como ls, grep, cat, etc.) mediante el uso de fork y execvp.
Se han implementado los siguientes comandos directamente en el código de la shell:
cd: Cambia el directorio de trabajo actual. Soporta ir alHOMEsi no se pasan argumentos.exit: Finaliza la shell de forma segura, cerrando los procesos en segundo plano.umask: Permite consultar o modificar la máscara de creación de archivos del usuario (en formato octal).jobs: Lista todos los trabajos que se están ejecutando en segundo plano o que han sido detenidos.bg: Reanuda la ejecución de un trabajo detenido en segundo plano enviando la señalSIGCONT.
- Pipes (
|): Soporta el encadenamiento de múltiples comandos mediante tuberías. - Redirección de entrada (
<): Lee la entrada desde un archivo. - Redirección de salida (
>): Escribe la salida estándar en un archivo. - Redirección de error (
>&): Redirige la salida de errores a un archivo.
- Los comandos pueden ejecutarse en segundo plano añadiendo un
&al final. - La shell ignora de forma predeterminada las señales
SIGINT(Ctrl+C) ySIGTSTP(Ctrl+Z) para evitar cerrarse accidentalmente, permitiendo que estas afecten solo a los procesos hijos en primer plano.
myshell.c: Código fuente principal que contiene el bucle de la shell y la lógica de ejecución.parser.h: Cabecera que define las estructurastlineytcommandpara el procesamiento de comandos.libparser.a: Librería estática encargada del análisis léxico (tokenización) de la línea de comandos.compila.sh: Script de Bash para compilar el proyecto de forma estática.
Para compilar la shell, simplemente ejecuta el script de compilación incluido:
chmod +x compila.sh
./compila.sh