0

IP への現在の ping とその他の統計を表示する小さなコンソール アプリケーション (Visual Studio 2012 を使用した Windows プラットフォーム) を作成しています。(最後の100pingの平均、パケット損失など...)これが私の実際の実装です:

char buffer[100];
FILE *fp = _popen("ping -l 1 -n 1 61.5.222.121" , "r");
for (i=0;i<8;i++) {
   fgets(buffer,100,fp);
}
_pclose(fp)

この関数をメインで次のように呼び出します。

_beginthread( ping, 0, NULL );

次に、strstr と sscanf_s を使用してバッファーから ping を抽出します。しかし、プログラムを実行すると、プロセス マネージャーで ping.exe と cmd.exe が開いたり閉じたりし続けることがわかります。

ping 時間の値を取得するためのよりクリーンな方法を探しています。たとえば、popen で新しい行が作成されるたびに出力を読み取ることができるもの (コマンド "ping google.com -t" を使用)、この方法では、すべてを作成する ping.exe および cmd.exe プロセスが 1 つだけになります。ジョブと ping の更新時間ははるかに高速になります。

IcmpSendEcho コマンドを調べましたが、これは非常に複雑に見えます。私は基本的に、バックグラウンドで実行され、新しい応答を受信するたびに ping 応答時間をグローバル変数に書き込む単純な関数が必要です。

4

1 に答える 1

2

IcmpSendEcho の実行が複雑に思われる場合は、必要に応じて変更するこのソース コードが役立つ可能性があります。

于 2013-06-25T08:04:18.390 に答える