システムコマンドを呼び出しています
system("tftp -m binary 192.168.1.1 -c get myfile > /dev/null") ;
tftpサーバーが実行されているときは正常に動作しますが、tftpサーバーがオフのときにcプログラムがクラッシュします。
サーバーがcソースコードで利用可能かどうかを確認する方法はありますか?
あなたの問題はサーバーの可用性にあるとは思いませんが、tftp(少なくとも私のUbuntuボックスでは)があなたが提供したコマンドライン引数をサポートしていないという事実。実際のところ、サポートしているコマンドライン引数はサーバーの名前だけです。
ただし、次のように、コマンドをtftpにパイプする(インタラクティブセッションをシミュレートする)ことを試みることができます。
system( "echo -e \"binary\\nget myfile\\nquit\" | tftp 192.168.1.1" );
サーバーが利用できない場合は、数秒後にタイムアウトになり、プログラムに制御が戻ります。
system("echo -e \"timeout 1\\nget myfile\" | tftp 192.168.1.1");
プログラムウォッチドッグをリセットする実際のレイテンシがgetコマンドの実行時に実行されているため、quitコマンドの代わりにタイムアウトオプションを使用しました。だからやめることはこれを防ぐことはできません。
一方、cプログラムを起動するbashスクリプトでtftpコマンドを呼び出すことにしました。
リアルタイムcプログラムでtftpコンマを呼び出すのは誤りだと思います。
イーサンに感謝します。