getdents() システムコールは内部的にどのように機能しますか?

getdents() システムコールは内部的にどのように機能しますか?

私は最近、最初から独自のPOSIXオペレーティングシステムを作成するためのLinuxソースコードの研究を始めました。私が理解したのは、UNIXシリーズシステムのすべてがファイルです。バイトを読み書きできるものはすべて「ストリーム」として抽象化できます。しかし、ここで私は偶然にインターネット上の誰も気にしないような質問を見つけました。 (少なくとも私はそれを説明するものが見つかりませんでした。)

私の質問は明確ではないかもしれないので、理解したいものの例は次のとおりです。シェルに「ls -l」と入力すると、ディスクに保存されている物理ファイルだけでなく、ブロックおよび文字デバイスも一覧表示されます。 、リンク、ディスクに保存されているファイル以外の項目です。どのように動作しますか?

事前にありがとう、デイブ。

ベストアンサー1

POSIXオペレーティングシステムを最初から作成することは、このサイトの範囲をはるかに超えています。また、タイトルと実際の質問が一致しません。

Linuxでシステムコールがどのように機能するのか疑問に思ったら、getdentsコードを見てください。すでに他の部分でも同じことをしているようです。しかし、getdentsそれほど重要ではありません。初期のUNIXシステムにはそのような機能がなかったからです。このgetdents機能は、さまざまなファイルシステムをサポートするために導入されました。

実際の質問に関しては、コマンドはlsファイルを一覧表示しますが、ディレクトリエントリを一覧表示するという誤解があるようです。 UNIXのディレクトリエントリは、ディレクトリ、名前付きパイプ、およびデバイスだけでなくファイルも参照できます。文字およびブロックデバイスエントリは、カーネルのさまざまなドライバへのインタフェースです。これには、ドライバを識別する番号と同じドライバが処理する様々なデバイスを識別する他の番号が含まれる。

最新のシステムもファイルシステムソケットをサポートしますが、ソケット全体の概念は元のUNIX設計の一部ではありません。ソケットはファイルではありません。 「すべてがファイルです」は元のUNIXデザインを表します。ただし、ソケットが設定されると、ファイルにも適用されるいくつかの操作がサポートされます。

ソースコードを勉強することはできますが、自分で書く前にPOSIXシステムについて学ぶことをお勧めします。

おすすめ記事