Requires:
Glib and libcheck
Otero Alan Sharry Facundo Collo Gaston Rodriguez Diego
- Introducción
- Técnicas de Programación
- Herramientas de Programación
- Setup
- Módulos
- FeedBack
- Conclusiones
-
Es una CLI que posee tres comandos básicos cd, exit y help, y que además puede ejecutar comandos simples del sistema con redirección y en pipelines pares.
-
Se trato de llegar siempre a un código modular y limpio, que cumpla con los requerimientos, pero manteniendo un balance con la legibilidad.
-
Durante todo el desarrollo del laboratorio usamos el IDE CLion con la extensión CodeWithMe para conectarnos al mismo workspace. GDB fue clave para el avance.
make clean
make
o también
make all
./mybash
make && ./mybash
- Contiene los TADs responsables de construir y dar funcionalidad a nuestras pipelines y comandos simples, abstrayendo su comportamiento.
- Contiene métodos para manejar los comandos internos; específicamente ejecutarlos, enumerar y encapsular las syscalls de los builtin implementados, y chequear si un scommand es un comando interno. Ademas implementamos function pointers para lograr cierto "Polimorfismo" y que sea mas sencillo llamar al executor de nuevos comandos internos.
- Es el encargado de ejecutar los comandos de una pipeline, conectando sus inputs y outputs y ademas realizarlos en procesos hijos.
- Es el encargado de iterar entre los argumentos, símbolos y demás patrones que nos interesen que se encuentren en un string y construir nuestros TAD pipeline y scommand.
Nuestro proceso de desarrollo fue el siguiente:
Comenzamos desarrollando la estructura del command. En principio nos fuimos guíando por el díagrama que dejó la cátedra en el doc, y luego nos ayudamos de las específicaciones que estaban en cada .h (command.h). Al comenzar con la estructura de command y pipeline, nos decidimos usar Glist de la librería Glib, porque tenía métodos ya implementados que ibamos a necesitar en cada función propia(como hacer push o pop). Lo próximo que realizamos fue el parsing y el builtin, en paralelo. El builtin lo hemos ido cambiando, ya que aparecían mejores formas de desarrollo(mas elegante y modularizada) y a medida que pasaban los días, mejorabamos el código o eliminabamos cosas innecesarias, también arreglabamos problemas como "segmentation fault" que generaban los ciclos o los punteros. El último día testeamos que la llamada a los comandos internos, funcionaban, el cd, exit y help. Al final de todo y lo que mas problema generó fue el execute.c, en especial lo que implica el fork y pipe, por sus test, pero que lograron resolverse el último día. Pudimos resolver todo lo que implican los puntos necesarios para aprobar el proyecto, desde los comandos internos a los procesos zombies, y también realizar un punto estrella: generar un prompt con información relevante.
Sentimos que el lab fue entretenido y pudimos adquirir los conocimientos de una manera desafiante pero satisfactoria, si bien no llegamos a cumplir todos los puntos extra, de haber tenido mas tiempo (Hablando del tiempo personal de cada uno de los integrantes), consideramos que habria sido totalmente alcanzable.