No.1ベストアンサー
- 回答日時:
ping(3)のソースを改造してもそう難しくはありませんが、下記の方法でpingを実行した結果を取得できます。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
char *prog;
int
main(int argc, char *argv[])
{
FILE *Pping;
char cmd[BUFSIZ], buf[BUFSIZ];
prog = argv[0];
if (argc < 2) {
fprintf (stderr, "Usage: %s hostname\n", prog);
exit(EINVAL);
}
snprintf(cmd, BUFSIZ, "ping -c 1 %s", argv[1]);
if ((Pping = popen(cmd, "r")) == NULL) {
fprintf(stderr, "Can't exec \"%s\"\n", cmd);
exit(errno);
}
fgets(buf, BUFSIZ, Pping);
fgets(buf, BUFSIZ, Pping);
printf("%s", buf);
return 0;
}
No.3
- 回答日時:
>ping自体にすぐに結果が返ってこない場合あきらめるというようなオプションはないようです。
-w waittime
どのような場合でも関係なく、 ping を waittime 秒後に終了させる。
というものではだめでしょうか?
No.2
- 回答日時:
pingのエラーに対処できるよう標準エラー出力もパイプで受け取ったほうが良かったですね。
-- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< -- 8< --
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
char *prog;
int
main(int argc, char *argv[])
{
FILE *Pping;
char cmd[BUFSIZ], buf[BUFSIZ];
prog = argv[0];
if (argc < 2) {
fprintf (stderr, "Usage: %s hostname\n", prog);
exit(EINVAL);
}
snprintf(cmd, BUFSIZ, "ping -c 1 %s 2>&1", argv[1]);
if ((Pping = popen(cmd, "r")) == NULL) {
fprintf(stderr, "Can't exec \"%s\"\n", cmd);
exit(errno);
}
fgets(buf, BUFSIZ, Pping);
printf("ret1 = %s", buf);
fgets(buf, BUFSIZ, Pping);
printf("ret2 = %s", buf);
pclose(Pping);
return 0;
}
この回答への補足
ちょっと補足で質問させてください。
このプログラムですと結果が返ってこないときにとまってしまうのですが何か対処法がありましたら教えてください。
ping自体にすぐに結果が返ってこない場合あきらめるというようなオプションはないようです。
二度目の質問で恐縮ですがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(インターネット接続・インフラ) ブラウザにIPアドレス入力した時 1 2022/06/16 19:08
- ゲーム PS4のフォートナイトやAPEXでWiFiのping?が10秒に一回の頻度で100、200を超えたり 1 2022/04/29 19:12
- ゲーム スマホゲームのping値について 昨日から、オンラインスマホゲームのping値がとても高くなりまとも 2 2022/08/19 22:52
- アプリ APEXをやっていて通常pingが30くらいなんですけど3分に1回100↑pingになります。 この 1 2022/04/21 23:15
- ASP・SaaS イントラネットを構築したい 2 2022/04/24 11:08
- 日本語 ドゥーイングとピンポンはどちらも語末が「ŋ」なのにカタカナの表記が違うのか 2 2022/07/14 08:41
- ルーター・ネットワーク機器 光回線の下り120〜390Mbpsは速いですか? 5 2022/08/10 19:57
- Wi-Fi・無線LAN wifiのping値が安定しなくて、オンラインゲームをするときに困っています。(10秒にいっかいpi 3 2023/06/11 23:26
- その他(IT・Webサービス) Speed test というインターネットの回線速度を測るサイト 1 2023/04/22 22:35
- その他(ソフトウェア) ウェブアートデザイナーのカラーモード 2 2023/04/05 13:50
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
charでの計算?
-
配列をnビットシフトする
-
DPマッチング
-
char型からのバイト数取得
-
文字列から空白を取り除きたい...
-
fgetsなどのときのstdinのバッ...
-
YUV⇔RGB変換がうまくいきません。
-
int main()の・・・
-
strtok関数 自作
-
str系関数を使わずに二つの文字...
-
2曲同時再生するにはどうした...
-
double型の値をchar配列に変換...
-
間接参照のレベルが異なっています
-
【C言語】テキストファイル内の...
-
全角文字を含んだ文字の並びを...
-
javaでunsignedは使えないので...
-
テキストデータをそのままバイ...
-
main の引数には const 付けた方が
-
ワイルドカードを用いた文字列検索
-
制御の方法
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
fgetsなどのときのstdinのバッ...
-
C言語のfor文です。 繰り返しの...
-
文字列から空白を取り除きたい...
-
charからLPTSTRへの変換方法
-
charでの計算?
-
配列をnビットシフトする
-
CStringをwchar_tに変換したい
-
c++ 文字列を入力して、一文字...
-
str系関数を使わずに二つの文字...
-
間接操作のレベルとは
-
int main()の・・・
-
C言語の入力した文字を反転させ...
-
atoi( ) の反対をやりたい
-
switch文で文字を比較すること...
-
テキストデータをそのままバイ...
-
Win32APIでのエディットボック...
-
double型の値をchar配列に変換...
-
干支のプログラム
-
コンパイルエラー invalid ope...
-
間接参照のレベルが異なっています
おすすめ情報