2009-09-30 21 views
23

Soy un novato en el proceso y la gestión de subprocesos. Mi Shell debería comprender la variable de entorno PATH. Se puede establecer y modificar. Se ejecuta de dos maneras: interactivo & modo por lotes. Shell es capaz de tomar más de un trabajo como ls; ps; wc file; cal. También quiero ensuciarme las manos con las señales. Así que debería manejar^K,^c también.¿Cómo puedo implementar mi propio shell básico de Unix en C?

Sé que tendré que usar ejecutivos, tenedores y tuberías, pero simplemente no puedo comenzar.

+2

¿Es esta una pregunta tarea? Si es así, debe etiquetarlo apropiadamente. – Amok

+2

No No es así! –

Respuesta

14

Todas las shells de Unix son de código abierto, por lo que un buen lugar para comenzar puede ser leer el código.

Si está buscando un buen artículo para principiantes sobre el tema, intente Writing Your Own Shell en el Linux Gazette.

Otro buen punto de partida es echar un vistazo al código fuente de mini-shell simplemente porque es uno de los más pequeños para darse vuelta.

8

su bucle principal es:

  • leer una línea (utilice fgets(3) por una simple concha, readline(3) de una fantasía)
  • analizar el comando
  • tenedor y ejecutar las tuberías

Para analizar el comando, hay dos opciones comunes. Escriba un analizador de descenso recursivo o use yacc(1) para generar uno. Es mucho más fácil eliminar un analizador inicial usando yacc, pero puedes quedarte completamente atrapado depurándolo y realmente quiere estar libre de contexto. Prefiero el descenso recursivo, pero casi todos los demás en el mundo prefieren usar yacc. (Técnicamente, bison.) Si el caparazón es realmente muy simple, como una concha de tarea, el yacc puede ser excesivo.

Para realizar el análisis léxico, también puede hacer su propio diseño o usar flex.

No necesitará usar ningún hilo.

+3

Yo recomendaría 'readline()' ser utilizado en cualquier caso - le hará la vida infinitamente más fácil siempre que tenga que usar dicho caparazón. Pero +1 por empantanarse en yacc/bison. Buenas herramientas, pero es una tarea difícil de simplificar. –

+0

Si solo quieres ejecutar programas desde tu caparazón, entonces no necesitas un analizador y un analizador ... sin embargo, si quieres hacer "otras" cosas, te sugiero que uses flex + yacc ... * do no hacer el suyo propio * – aviraldg

+1

Lo estoy consiguiendo. Pero también quiero ensuciarme las manos con las señales. Así que debería manejar^K,^c también. –

Cuestiones relacionadas