質問

" Is"の正確な方法を知りたいコマンドはLinuxおよびUnixで機能します。

私が知る限り、lsは分岐します。 Linux / Unixシェルにexecしてから、出力を取得します(現在のファイルツリー。たとえば、/ home / ankit /)。 forkを呼び出した後に何が起こるかわからないので、より詳細な説明が必要です。

「ls」コマンドの機能について詳しく説明してください。

役に立ちましたか?

解決

lsはフォークしません。シェルは、組み込まれていないコマンドを実行するためにフォークおよび実行します。実行できるコマンドの1つはlsです。

lsは、opendir()およびreaddir()を使用して、ディレクトリ内のすべてのファイルをステップスルーします。それらの1つに関する詳細情報が必要な場合、stat()を呼び出します。

他のヒント

答えに追加するために、Cプログラミング言語の本(K& RC)で、lsの実装方法の簡単な例を示しました。彼らは非常によく使用されるデータ構造と機能を説明しました。

lsの機能を理解するには、OpenSolarisのソースをご覧ください: https://hg.java.net/hg/solaris~on-src/file/tip/usr/src/cmd/ls/ls.c

それが圧倒的な場合、Solarisでは、トラスを使用して、lsが何を行うかを理解するために行うシステムコールを調べることから始めます。トラスを使用して、次を試してください:

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

それからls.outの出力を見て

トレースはLinuxのトラスに相当すると思います。

lsの詳細な内容を本当に理解したい場合は、ソースコードをご覧ください。 tpgouldのSolarisソースへのリンクをたどることも、LinuxまたはBSDディストリビューションからオンラインで簡単にソースを見つけることもできます。

特に4.4BSDソースを推奨します。

思い出すと、lsは多くのオプションを解析することから始まり、コマンドラインにリストされたファイルまたはディレクトリから始まります(デフォルトは"。"です)。サブディレクトリは、ディレクトリリストルーチンへの再帰によって処理されます。私が思い出すfork()またはexec()はありません。

これは古いスレッドですが、支持されて受け入れられた答えが部分的に間違っていると思うので、まだコメントしています。 @Markは、lsがシェルに組み込まれているため、シェルがexecおよびforkしないことを示しています。 bashでtldpドキュメントを調べたとき(リンクを添付しました) " ls "ビルドインコマンドとしてリストされていません。

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

Bash組み込みコマンド:

alias、bind、builtin、command、declare、echo、enable、help、let、local、logout、printf、read、shopt、type、typeset、ulimit、unalias。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top