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 応答時間をグローバル変数に書き込む単純な関数が必要です。