1

システムコマンドを呼び出しています

system("tftp -m binary 192.168.1.1 -c get myfile  > /dev/null") ;

tftpサーバーが実行されているときは正常に動作しますが、tftpサーバーがオフのときにcプログラムがクラッシュします。

サーバーがcソースコードで利用可能かどうかを確認する方法はありますか?

4

2 に答える 2

2

あなたの問題はサーバーの可用性にあるとは思いませんが、tftp(少なくとも私のUbuntuボックスでは)があなたが提供したコマンドライン引数をサポートしていないという事実。実際のところ、サポートしているコマンドライン引数はサーバーの名前だけです。

ただし、次のように、コマンドをtftpにパイプする(インタラクティブセッションをシミュレートする)ことを試みることができます。

system( "echo -e \"binary\\nget myfile\\nquit\" | tftp 192.168.1.1" );

サーバーが利用できない場合は、数秒後にタイムアウトになり、プログラムに制御が戻ります。

于 2012-04-06T17:28:51.730 に答える
0
system("echo -e \"timeout 1\\nget myfile\" | tftp 192.168.1.1");

プログラムウォッチドッグをリセットする実際のレイテンシがgetコマンドの実行時に実行されているため、quitコマンドの代わりにタイムアウトオプションを使用しました。だからやめることはこれを防ぐことはできません。

一方、cプログラムを起動するbashスクリプトでtftpコマンドを呼び出すことにしました。

リアルタイムcプログラムでtftpコンマを呼び出すのは誤りだと思います。

イーサンに感謝します。

于 2012-04-10T10:48:43.997 に答える