Constellation Knowledge Network - Preguntas y respuestas sobre Bagua - código fuente del intérprete de comandos de shell

código fuente del intérprete de comandos de shell

Se requiere implementar un intérprete de comandos simple, que es el programa shell en Linux. En este programa lo llamamos ysh. Los requisitos son:

1. ejecutar comandos de programa externos, los comandos pueden tomar parámetros

2. Capaz de ejecutar comandos internos como fg, bg, cd, historial, salida, etc.

3. y redirección de entrada y salida;

4. Admite trabajos frontales y posteriores y proporciona funciones de control de trabajos, incluida la impresión de listas de trabajos, cambio del estado frontal/de fondo de los trabajos actualmente en ejecución y control de la suspensión, suspensión y continuación. de trabajos;

5. Utilice la herramienta Crear para crear el proyecto;

6. Utilice el depurador gdb para depurar el programa;

2. :

Este programa de programación ysh no incluye soporte para archivos de configuración ni parámetros de línea de comando. Se requiere que ysh proporcione un símbolo del sistema, como ysh>, lo que significa que acepta la entrada del usuario. Después de completar cada ejecución, se imprime el siguiente símbolo del sistema ysh>. Cuando el usuario no ingresa, ysh debe estar en espera. estado para la entrada y, al mismo tiempo, en la pantalla se muestra cierta información necesaria.

3. Requisitos específicos para el intérprete Ysh:

1. Comandos externos y comandos internos:

En la mayoría de los casos, se ejecutan los comandos ingresados ​​por el usuario. Los programas ejecutables almacenados en el sistema de archivos se denominan comandos externos o programas externos. Ysh debería admitir la redirección de entrada/salida a un archivo al ejecutar estos programas y permitir que varios programas se concatenen mediante tuberías. Llamamos trabajos a los comandos coincidentes conectados por tuberías y a los comandos utilizados individualmente.

Los comandos externos se presentan en forma de una serie de cadenas delimitadas. La primera cadena puede ser el nombre del programa ejecutable y las demás son parámetros pasados ​​al programa externo. Si el archivo ejecutable nombrado por la primera cadena no existe o no es ejecutable, el comando se considera un error.

El intérprete también debe admitir algunos comandos internos, que implementan acciones específicas dentro de ysh. Los siguientes son algunos comandos internos. Si el usuario envía un comando interno, ysh debe realizar las acciones correspondientes como se describe a continuación. Salida 8?5: Salida ysh. 8?5 trabajos: imprime información sobre los trabajos que se ejecutan actualmente en segundo plano y los trabajos pendientes. La información de salida debe estar en un formato que sea fácil de entender para los usuarios. 8?5 fg %: coloque el trabajo identificado por en primer plano. Si el trabajo se ha detenido, continuará ejecutándose. El shell debe esperar a que finalice el proceso secundario que se ejecuta en primer plano antes de imprimir un nuevo símbolo del sistema. 8?5 Bg %: Ejecuta el proceso suspendido identificado por en segundo plano.

2. Línea de comando:

Cuando el usuario ingresa un comando en el símbolo del sistema, toda la línea ingresada se denomina "cadena de línea de comando" y ysh debe guardar cada carácter de línea de comando. . Cadena hasta que finaliza la ejecución del trabajo que representa, incluidos los trabajos en segundo plano y los trabajos suspendidos.

3. Trabajos en primer plano y en segundo plano

ysh debería poder ejecutar trabajos en primer plano y en segundo plano. El shell espera hasta que finaliza la ejecución en primer plano. Al comenzar a ejecutar un trabajo en segundo plano, el mensaje ysh> debe imprimirse inmediatamente para permitir al usuario ingresar el siguiente comando.

La ejecución de un trabajo en primer plano siempre tiene prioridad sobre un trabajo en segundo plano ySH no necesita esperar a que se complete un trabajo en segundo plano antes de imprimir el siguiente mensaje, independientemente de si hay un trabajo en segundo plano ejecutándose. siempre que se complete un trabajo en primer plano, aparecerá inmediatamente el mensaje ysh> cuando finalice un trabajo en segundo plano, ysh debería imprimir un mensaje inmediatamente después de que finalice el trabajo.

4. Teclas especiales:

También llamadas teclas combinadas. A través del controlador del terminal, combinaciones de teclas especiales pueden generar señales para ysh, y el programa debe responder adecuadamente a estas señales. 8?5 Ctrl + Z: Genera la señal SIGTSTP. Esta señal no suspende ysh, pero permite que el shell suspenda los trabajos que se ejecutan en primer plano. Si no hay trabajos en primer plano, esta clave especial no es válida. 8?5 Ctrl+C: Genera una señal SIGINT. Esta señal no finaliza ysh, pero envía una señal a través de ysh para finalizar el proceso en el trabajo en primer plano. Si no hay trabajos en primer plano, esta clave especial no tiene ningún efecto.

5. Analizar la entrada del usuario:

a) Delimitadores y caracteres especiales

El analizador de sintaxis que analiza la entrada del usuario debe tener las funciones que se describen a continuación. para errores de entrada del usuario. Si algo sale mal en la entrada del usuario, ysh debería mostrar un mensaje de error razonable.

ysh acepta una línea de comando ingresado por el usuario cada vez y comienza a ejecutar la acción de análisis después de que el usuario presiona la tecla Enter (Enter). El comando vacío no hace más que imprimir un nuevo mensaje.

Defina el carácter de espacio como delimitador. ysh debería poder manejar caracteres de espacio repetidos que aparecen en el medio y antes y después de la línea de comando.

Ciertos caracteres se denominan "metacaracteres" y tienen definiciones especiales en el contexto de la entrada del usuario. Estos caracteres incluyen "&, |, <, >". Shell supone que estos caracteres no aparecerán en los nombres de programas, nombres de parámetros y nombres de archivos. Son caracteres reservados para ysh.

b) Comando interno:

Si la cadena de la línea de comando se ajusta al formato del comando interno introducido anteriormente, se interpreta como un comando interno. Si no es así, considera que puede ser la ejecución de un programa externo, o puede ser un error.

c) Redirección de E/S:

Un comando de programa puede ir seguido de metacaracteres "<" o ">". Son símbolos de redirección, y en la redirección el símbolo va seguido de. un nombre de archivo. En el caso de "<", la entrada del programa se redirige a un archivo específico. En el caso de ">", la salida del programa se redirige a un archivo específico. Si el archivo de salida no existe, debe crear un archivo de salida. Si el archivo de entrada no existe, se considera un error.

d) Canalizaciones y corrutinas

Cuando varios comandos están separados por el metacarácter "|" en una línea de comando, este metacarácter representa el símbolo de canalización. En este caso, ysh crea un proceso para cada subcomando y conecta su entrada y salida con tuberías.

Por ejemplo, la siguiente línea de comando:

progA argA1 argA2 < infine | progB1 > outfile

Se deben generar dos procesos, progA y progB. la entrada de ProgA proviene del archivo infile, la salida de porgA es la entrada de progB y el archivo de salida de progB es el archivo out. Esta línea de comando se puede implementar a través de canalizaciones en la comunicación entre procesos.

Los comandos que contienen uno o más pipes generarán errores en las siguientes situaciones: 8?5 Cuando alguna de sus subrutinas falla al ejecutarse. 8?5 Se redirige la entrada a subrutinas distintas a la primera. 8?5 Se redirige la salida de las subrutinas excepto la última subrutina.

Un trabajo que consta de múltiples procesos conectados por tuberías no finalizará hasta que todos sus procesos secundarios hayan completado la ejecución.

e) Trabajo en segundo plano

Cuando el usuario necesita ejecutar un trabajo en segundo plano, se puede agregar el metacarácter "&" después del comando del trabajo.

Los comandos de trabajo ingresados ​​por el usuario de esta manera deben ejecutarse en segundo plano sin afectar la interacción entre el usuario y el terminal

上篇: El duque de Zhou vende el ataúd_¿Qué significa el duque de Zhou vende el ataúd? 下篇: Noticias de última hora sobre chismes de la FCC
Artículos populares