(Debian(7)ベースのLinuxディストリビューションのman dpkg
1.16.16(i386)):
--status-fd n
マシンが読み取ることができるパケットの状態と進捗情報をファイル記述子に送信します。N
私はこれを次のように読みました: "printf
たとえば、ファイル記述子で生成された機械可読コードの渡しstdin
「私はファイル記述子(0)、stdout
(1)、stderr
(2)を知っていると思います。
いくつかの例を見つけようとしましたが、ファイル記述子の部分が2桁(おそらくそれ以上...)で構成されているというエラーレポートのみが見つかりました。これにより、ファイル記述子の知識が拡張されます。、これはより多くの問題を引き起こします。したがって:
質問dpkg
:オプションはどのように使用しますか--status-fd
?
実際の例と何が起こっているのかについてのいくつかの意見は、理解するのに役立ちます。
答え1
このオプションは、GUIからユーザーに素晴らしい進捗レポートを提供するなど、他のプログラムが解析できるように進捗状況を報告するように指示し--status-fd
ます。dpkg
パラメータ--status-fd
は次のとおりです。ファイル記述子、開いているファイルの数を指定します。少し簡単にするには:
- プロセスが初めてファイルを開くと、ファイルに記述子番号 0 が割り当てられます。次回は、ファイルに記述子番号1が割り当てられる式に進みます。システム
open
コールはファイル記述子を返します。 - プロセスがファイルから読み取りまたは書き込みなどの操作を実行したい場合は、ファイル記述子としてファイルを指定します。これは
read(0, addr, 10)
、たとえば、「説明者0から10バイトを読み取り、メモリアドレスに配置しますaddr
」を意味します。 。 - 各プロセスには独自のファイル記述子があります。ファイル記述子N進行中血ファイル記述子とは何の関係もありません。N進行中キュー。
- プロセスは、作成されると親プロセスのファイル記述子を継承します。
- 通常、プロセスはファイル記述子0、1、2が開いた状態で実行されます。 0は入力に使用され、1は通常の出力に使用され、2はエラーメッセージに使用されます。
リダイレクト特定の記述子でファイルを開きます。たとえば、シェルスクリプトまたはコマンドラインでmycommand <somefile
ファイル記述子番号0(標準入力)を連結し、それ以前somefile
の項目(コマンドが端末で実行されている場合は端末)の代わりに(読み取り用に開かれて)接続します。リダイレクト演算子の前に記述子番号を追加できます。mycommand 3<somefile
ファイル記述子番号3を連結しますsomefile
(ほとんどのコマンドはこのファイル記述子を使用して何もしません)。
dpkgは、パッケージのインストール、アップグレード、またはアンインストール時に、パッケージのプリインストール/インストール後/削除スクリプト内でさまざまなその他のコマンドを実行します。これらのコマンドのいくつかは入力を読み取ったりメッセージを表示したりすることができるため、dpkgは呼び出し時に接続されているすべての項目に関連付けられた標準記述子を保持します。
標準ファイル記述子が採用されているため、dpkg
呼び出し側は状態報告用に別のファイル記述子を指定できます。ステータスレポートをファイルに入れることができます。たとえば、次のようになります。
dpkg --status-fd 3 -i somefile.deb 3>/tmp/dpkg.status
別の端末で実行し、ステータスtail -n +1 -f /tmp/dpkg.status
メッセージが表示されていることを確認してください。
dpkg
通常、ステータスレポートを呼び出し、希望するフロントエンドは管路(一方向通信チャネル)実行する前に、ファイルdpkg
記述子を書き込みパイプの末尾に引数として渡します--status-fd
。その後、フロントエンドはパイプの読み取りの終わりに読み取り、他のものと混同する危険なしに結果ステータスメッセージを取得します。