Pregunta

Me gustaría saber exactamente cómo es " Is " El comando funciona en Linux y Unix.

Hasta donde yo sé, ls forks & amp; exec para el shell Linux / Unix y luego obtiene la salida (del árbol de archivos actual. ej ./home/ankit/). Necesito una explicación más detallada, ya que no estoy seguro de lo que sucede después de llamar a fork.

¿Alguien podría explicar la funcionalidad del comando 'ls' en detalle?

¿Fue útil?

Solución

ls no se bifurca. El shell se bifurca y ejecuta para ejecutar cualquier comando que no esté integrado, y uno de los comandos que puede ejecutar es ls.

ls usa opendir () y readdir () para recorrer todos los archivos en el directorio. Si necesita más información sobre uno de ellos, llama a stat ().

Otros consejos

Para agregar a la respuesta, en el libro El lenguaje de programación C (K & amp; RC) han dado un pequeño ejemplo sobre cómo implementar ls. Han explicado las estructuras de datos y las funciones utilizadas muy bien.

Para comprender lo que hace ls, puede echar un vistazo a la fuente de OpenSolaris: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c .

Si eso es abrumador, en Solaris se comienza por usar truss para ver las llamadas al sistema que ls hace para entender lo que hace. Usando truss, intente:

truss -afl -o ls.out / bin / ls

luego mira la salida en ls.out

Creo que trace es el equivalente a truss en Linux.

Si realmente quieres entender las entrañas detalladas de ls, mira el código fuente. Puede seguir el enlace de tpgould a la fuente de Solaris, o es fácil encontrar la fuente en línea desde cualquier distribución de Linux o BSD.

Recomiendo especialmente la fuente 4.4BSD.

Como recuerdo, ls comienza analizando sus muchas opciones, luego comienza con los archivos o directorios enumerados en la línea de comando (el valor predeterminado es ". "). Los subdirectorios se manejan por recursividad en la rutina de la lista de directorios. No hay fork () o exec () que yo recuerde.

Este es un hilo antiguo, pero todavía estoy comentando porque creo que la respuesta que fue votada y aceptada es parcialmente incorrecta. @ Mark dice que ls está integrado en el shell, por lo que el shell no se ejecuta y se bifurca. Cuando estudié el documento tldp en bash (he adjuntado el enlace) " ls " no aparece como un comando de compilación.

http://tldp.org/LDP/Bash-Beginners- Guide / html / sect_01_03.html

Comandos incorporados de Bash:

alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit and unalias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top