CプログラムAで開かれたファイル記述子が与えられたら、プログラムBをU2で開きたいとfd
思います。fd
私のシステム(wsl2 ubuntu)execl("/usr/bin/su", "su", suarg1, "U2");
(ここでsuarg1は「-c B」+ toHex(fd)です)が動作しているようで、最初の引数を解析してBのファイル記述子にアクセスできます。ただし、ファイル記述子を開いたままにするためのドキュメントには何も見つからず、いつでも変更できる動作に依存したくありません。それでは永遠に働く理由がありますか?あるいは、これが実装に依存する場合、文書化された作業方法で同様のことをどのように達成できますか?
編集:私は十分にはっきりしていないようです。 Execのドキュメントではファイル記述子を開いたままにしていると言っていますが、suドキュメントには同様のものがありません。だから私はそれをオフにしないと信じることができるかどうかはわかりません。試してみましたが、うまくいきましたが、次のいずれかが必要です。
- どのような状況でも、すべてのLinuxで実行されていることを確認してください。
fd
AからBに移動する別の方法はいジョブ履歴
ただ開いたままfd
にした方が良いでしょうが、信頼性がより重要です。
答え1
これは副作用ですexecl()
。現在のプロセスイメージを新しいプロセスイメージに置き換えます。現在開いているファイルを閉じず、代替ファイルがそのファイルを継承します。これは主に新しいプロセスがstdin / stdout / stderrにアクセスできるようにしますが、他のファイルを代替プロセスに渡すことを防ぐことはできません。