Domanda

Vorrei sapere esattamente come è " è " Il comando funziona in Linux e Unix.

Per quanto ne so, ls forks & amp; esegue la shell Linux / Unix e quindi ottiene l'output (dell'albero dei file corrente, ad es. casa / banca /). Ho bisogno di una spiegazione più dettagliata, in quanto non sono sicuro di cosa succede dopo aver chiamato fork.

Qualcuno potrebbe spiegare in dettaglio la funzionalità del comando 'ls'?

È stato utile?

Soluzione

ls non si biforca. La shell esegue il fork e l'esecuzione per eseguire qualsiasi comando non incorporato e uno dei comandi che può eseguire è ls.

ls utilizza opendir () e readdir () per scorrere tutti i file nella directory. Se necessita di maggiori informazioni su uno di essi, chiama stat ().

Altri suggerimenti

Per aggiungere alla risposta, nel libro The C Programming Language (K & amp; RC) hanno dato un piccolo esempio su come implementare ls. Hanno spiegato le strutture dati e le funzioni usate molto bene.

Per capire cosa fa ls, puoi dare un'occhiata alla fonte OpenSolaris: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c .

Se questo è schiacciante, su Solaris inizi a utilizzare la capriata per guardare le chiamate di sistema che ls fa capire cosa fa. Usando la capriata, prova:

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

quindi guarda l'output in ls.out

Credo che la traccia sia l'equivalente della capriata in Linux.

Se vuoi davvero capire le viscere dettagliate di ls, guarda il codice sorgente. Puoi seguire il link di tpgould alla fonte Solaris, oppure è facile trovare la fonte online da qualsiasi distribuzione Linux o BSD.

Raccomanderò in particolare la fonte 4.4BSD.

Come ricordo, ls inizia analizzando le sue numerose opzioni, quindi inizia con i file o le directory elencati nella riga di comando (il valore predefinito è ". "). Le sottodirectory sono gestite per ricorsione nella routine dell'elenco di directory. Non c'è fork () o exec () che ricordo.

Questo è un vecchio thread, ma sto ancora commentando perché credo che la risposta che è stata votata e accettata sia parzialmente errata. @Mark dice che ls è integrato nella shell, quindi la shell non viene eseguita e fork. Quando ho studiato il documento tldp su bash (ho allegato il link) & Quot; ls " non è elencato come comando build in.

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

Comandi incorporati in Bash:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top