章3.6 リダイレクトBashのマニュアルは次のように言います:
9より大きいファイル記述子を使用するリダイレクトは、シェルで内部的に使用されるファイル記述子と競合する可能性があるため、慎重に使用する必要があります。
しかし、章2.7 リダイレクト私が知っている限り、POSIX仕様には数量制限は記載されていませんか?
シェルによってどのような制限を知っておくべきですか?ファイル記述子番号がすでにシェルで内部的に使用されていることを確認してスキップできますか?使用できるファイル記述子の最大数はどれくらいですか?
答え1
限界。
これらの制限はオペレーティングシステムによって異なり、ulimit
次の影響を受ける可能性があります。
ファイル記述子を使用してプログラムします。
小規模プロジェクト
ルールを使用してください。視点に応じて、stdin、stdout、stderrがそれぞれ0、1、2の理由です。プログラム コレクションがファイル記述子 9 を使用して、ある種のパブリッシング/サブスクライバーにイベントを送信することを決定した場合は、プログラムがこの規則に従うことを確認する必要があります。これは実際にうまく機能します。
環境またはパラメータを介して情報を渡します。
GNU makeには、--jobserver-auth=R,W
使用するファイル記述子を知らせるオプション(RとWは数字)があります。稼働中のサーバー(今すぐ開いたファイル記述子を渡すのではなく、名前付きパイプを直接開くことをお勧めします)
bashにあなたのために選ぶようにしなさい。
言うなら
exec {fred}>/tmp/fred.out
echo hello >&$fred
次に bash はファイル記述子を選択し、その値を fred に保存します。次に、2行目の変数を展開して、対応するファイル>&
記述子にリダイレクトします。
答え2
シェルが決めるようにする方が良い
exec {somefd}<>myfile
exec {mysock}<>/dev/tcp/192.168.0.5/8888
echo somefd = $somefd
echo my socket file handle = $mysock
# to write to the socket
echo "howdy" >&$mysock
# to read a line back
IFS= read -u $mysock line
echo "$line"
# when done close file handles
exec {somefd}>&-
exec {mysock}>&-
unset somefd mysock
# happy coding