cat /proc/asound/cardsを実行すると、procがこの情報を取得するすべてのサウンドカードの詳細が一覧表示されます。このファイルは手動で入力したい場合は常に更新されます。
答え1
これは/proc
(および/sys
)がカーネルインタフェースであるためです。ディスクに物理ファイルがありません。この情報はオペレーティングシステムによって直接提供されます。個々のファイルはソケットインタフェースに似ています。ファイルを読み取るときにデータを要求することです。
これプロセスファイルシステム明らかにUNIX 8に由来し(Linux実装は他のほとんどの実装と同様にBell LabsのPlan 9で複製されていますが)、「すべてはファイルです」というUNIXモットーに従います。これは主に個々の実行中のプロセス(一番上の数字がpid)を表しますが、わかるように、これには他のいくつかの項目も含まれます。 Linuxではハードウェア指向です/sys
。
プログラムでproc情報を取得するよりも「より良い選択肢」を探している人が時々あります。ここで「より良い選択肢」とは、sysctl()
などのシステムコールを意味しますioctl()
。これは、procファイルまたはsysファイルを読み取るには、通常のファイルを読み取るなどのいくつかのI / Oオーバーヘッドが含まれているという誤解から来ているようです。一部のオペレーティングシステム(私の考えではFreeBSD)がその逆を実行し、Linuxではsysctl()
呼び出しは価値がありませんが、これは本当ではありません。
~からMan 2システム制御:
このシステムコールの使用は長い間推奨されておらず、あまり人気がなく、将来のカーネルバージョンでは消える可能性が高くなります。プログラムからすぐに削除します。代わりに /proc/sys インターフェイスを使用してください。
少なくともLinuxでは、procfsは正式に推奨されるカーネル情報ソースです。 「より良い選択」はありません。
答え2
ファイルは/proc
実際にはどこにも保存されません。ファイルを読み取ろうとすると、カーネルはそのドライバの関数を呼び出してファイルの内容を取得します。
/proc/asound/cards
の場合snd_card_info_read、ALSAの内部サウンドカードのリストから出力を生成します。
他のサウンドドライバをインスタンス化しない限り、他のアイテムを追加することはできません。