次のプロセスにより、Mac OS と Ubutu で動作が異なります。
cat some_text_file | xargs a_shell_script.sh
a_shell_script.sh
#!/bin/bash
echo "$@" | telnet 127.0.0.1 123
exit 0
ポート 123 でリッスンしている TCP サーバーは、some_text_file の内容を処理するようにスクリプト化されています。このプロセスの私の Ubuntu 実装では、TCP サーバーが受信する入力の長さは some_text_file の長さです。ただし、私の OSX 実装では、長さのより小さな部分、つまり入力が何らかの理由で切り捨てられます。
注: 私の知る限り、これは xargs の問題ではありません。$#
使用可能な args ( )の数a_shell_script.sh
は、両方の実装で同じです。
ありがとう!
答え1
実装について十分な知識がないため、リスニング側のプロセスはrecv(2)
ソケットからループせず、一度だけ読み取るとしか考えられません。Ubuntu では一度にすべてを取得できて、OS X では取得できないのは、おそらく 2 つのシステムの TCP スタックの実装に関係していますが、これは問題ではありません。代わりに、受信側のコードはソケットをポーリングし、利用可能なデータを読み取る必要があります。
socket(2)
および呼び出しを確認しrecv(2)
、役立つと思われる場合はコードを投稿してください。