C言語のソースにてPingを複数ホストに送信し、応答がない場合にある操作を行うプログラムを作成しています。
RAWソケットを自作して送信して・・・とやってもいいのですが、ちょっと手間がかかりそうなので、system関数を使用してPingをシェルにお願いしようとしています。
方針としては
system("ping -c 5 192.168.100.1 > /tmp/pingresult1 &");
system("ping -c 5 192.168.100.2 > /tmp/pingresult2 &");
system("ping -c 5 192.168.100.3 > /tmp/pingresult3 &");
と実行し、/tmp/pingresultのファイルができたら中身を読んで「5 packets transmitted, 5 packets received, 0% packet loss」という表示をみて判定しようと思っています。
しかし、実際にやってみるとファイルの中身は、
PING 192.168.100.1 (192.168.100.1): 56 data bytes
64 bytes from 192.168.100.1: icmp_seq=0 ttl=64 time=4.721 ms
で終わっていたり、Pingの応答がない場合は中身が空っぽになっており、Pingの結果がすべてファイルに書かれていない状態となっています。
system関数でこのようなことはできないのでしょうか?
追記
同様のことをpingではなく、
system("(date >> /tmp/test ; sleep 1; date >> /tmp/test ; sleep 5; date >> /tmp/test)&");
としたところ、きちんとすべての処理が終わりました。
pingになにかあるような気がしてきました。

回答5件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。