Skip to content

Un shell con un set de comandos para interactuar con tu sistema operativo. Práctica de Sistemas Operativos en la FIC

License

Notifications You must be signed in to change notification settings

TeenBiscuits/Practicas-SO

Repository files navigation

💻 Prácticas SO

To get acquainted with the C programming language we’ll start to code a shell

Un shell con un set de comandos para interactuar con tu sistema operativo. Última versión (entrega) de la práctica para la asignatura de Sistemas Operativos.

Note

Para ver un resumen de como funciona esta shell entra a la Wiki.

Warning

"¿Estoy en la primera entrega tengo que hacer todo esto?" Puedes descargar cada entrega más abajo.

⛏️ Compilación y Ejecución

Important

Este shell fue desarrollado para sistemas unix. Recomendamos encarecidamente compilarlo y ejecutarlo en Linux.

Es posible compilarlo para Mac, pero debe cambiar las librerías debido a las diferencias entre ambos sistemas.

Caution

No trates de compilar y ejecutar la práctica directamente desde el CLion u otro editor que use CMakeLists.txt. Este archivo está presente en el repositorio para permitir el correcto procesado del archivo por el IDE.

Usa el Makefile como flujo de compilación.

  1. Primero clona este repositorio

    git clone https://github.com/TeenBiscuits/Practicas-SO.git
  2. Entra a la carpeta

    cd Practicas-SO  
  3. Compila el programa usando las flags requeridas (es la opción por defecto del Makefile)

    make
    Todas las opciones del Makefile
    • make all o make (por defecto): Compila el programa con las flags requeridas (-Wall)
    • make debug: Compila el programa añadiendo las flags de debug y optimización (-g -O0)
    • make run: Compila el programa (como en la opción por defecto) y lo ejecuta acto seguido. Tratará de ejecutarlo usando rlwrap(1), de no estar instalado lo ejecutará de forma normal.
    • make leaks: Compila el programa (con las flags de debug) y trata de ejecutarlo con Valgrind.
    • make tests: Compila y ejecuta el programa como en leaks e introduce automáticamente por la entrada estandar los contenidos del archivo tests.txt.

    (1) Al ejecutarlo con rlwrap podrás usar las flechas / para moverte por el texto escrito o las otras flechas / para volver a escribir el texto anteriormente introducido.

  4. Ejecuta el programa

    ./shell 
    Otros parámetros

    Si ejecutas el script con el parámetro -p así:

    ./shell -p

    Importarás automaticamente el path a la lista de busqueda. Como si ejecutaras search -path nada más empezar.

  5. Tras esto el prompt de tu terminal debería haber cambiado a uno con el mismo formato que Ubuntu pero con usuario y el hostname de la máquina en morado. Ejemplo:

    user@hostname:~/Practicas-SO$
    
  6. Para salir ejecuta el comando exit o mata el proceso con Ctrl + C

🛠️ Comandos

Note

Esta breve lista fue usada para llevar un registro de los comandos que fueron implementados durante el desarrollo y sus diferentes parámetros.

Para ver en detalle que hace cada comando y las notas sobre ellos consulta la Wiki (Comandos).

Mostrar lista de comandos
  • authors [-l|-n]
  • pid
  • ppid
  • cd [dir]
  • date [-t|-d]
  • historic [N|-N] (1)
  • open [file] mode (cr,ap,ex,ro,rw,wo,tr)
  • close [df]
  • dup [df]
  • infosys
  • help [cmd]
  • quit, exit, bye

(1) Hypothetically, there’s a scenario where trying to repeat a historic command could yield an infinite loop or a stack overflow (depending on how it is coded), so students may choose to not store calls to historic N itself in the historic list if they want so (See the NOTES ON LIST IMPLEMENTATIONS at the end of this document)

Mostrar lista de comandos
  • makefile [name]
  • makedir [name]
  • listfile [-long][-link][-acc] name1 name2 n3 ... lista ficheros; (2)
  • cwd
  • listdir [-hid][-long][-link][-acc] n1 n2 ... lista contenidos de directorios (3)
  • reclist [-hid][-long][-link][-acc] n1 n2 ... lista recursivamente contenidos de directorios (subdirs después) ( 3)
  • revlist [-hid][-long][-link][-acc] n1 n2 ... lista recursivamente contenidos de directorios (subdirs antes)
  • erase [name1 name2 ..]
  • delrec [name1 name2 ..]

(2) -long: listado largo | -acc: acesstime | -link: si es enlace simbolico, el path contenido

(3) -long: listado largo | -hid: incluye los ficheros ocultos | -acc: acesstime | -link: si es enlace simbolico, el path contenido

Mostrar lista de comandos
  • allocate [-malloc|-mmap|-createshared|-shared]
  • deallocate [-malloc|-mmap|-shared|-delkey]
  • memfill [addr] [ch cont|cont]
  • memdump [addr] [cont]
  • memory [-funcs|-vars|-blocks|-all|-pmap]
  • readfile [file] [addr] [cont]
  • writefile [file] [addr] [cont]
  • read [df] [addr] [cont]
  • write [df] [addr] [cont]
  • recurse [n]
Mostrar lista de comandos
  • getuid
  • setuid [-l] id
  • showvar v1 v2 ..
  • changevar [-a|-e|-p] var val
  • subsvar [-a|-e] v1 v2 val
  • environ [-environ|-addr]
  • fork
  • search [-add dir|-del dir|-clear|-path]
  • exec [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • execpri prio [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • fg [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • fgpri prio [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • back [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • backpri prio [VAR1 VAR2 VAR3 ...] executablefile [arg1 arg2 ...]
  • listjobs
  • deljobs -term|-sig
  • *****

📖 Documentación

En la carpeta de documentación puedes consultar los PDFs y los archivos auxiliares que seguimos para realizar las 4 entregas de la prácitca.

En la Wiki de este repositorio puedes leer más sobre como funciona el código de este shell. Esperamos que esto te ayude a entender como implementar la práctica.

🔩 Antiguas versiones

El repositorio fue reformado para su publicación, si cambia a la rama old-repo puedes ver como era antes del cambio.

El código que aquí se muestra es de después de la última entrega, corrigiendo todos los errores de todas las entregas. Puedes descargar cada una de las entregas en la sección de releases.

😎 Créditos

Licenciado bajo Apache License 2.0 por Pablo Portas López y Pablo Míguez Muiño.

About

Un shell con un set de comandos para interactuar con tu sistema operativo. Práctica de Sistemas Operativos en la FIC

Topics

Resources

License

Stars

Watchers

Forks

Contributors 2

  •  
  •