
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語のfor文です。 繰り返しの...
-
fgetsなどのときのstdinのバッ...
-
テキストデータをそのままバイ...
-
C言語 バイナリファイルをfloa...
-
【C言語】テキストファイル内の...
-
文字列から空白を取り除きたい...
-
c言語配列の結合についてです。...
-
間接参照のレベルが異なっています
-
c言語プログラミング実行時エラ...
-
アルファベットの出現頻度求め...
-
<>で囲まれた文字列を文字列の...
-
std::stringstream で得るもの...
-
コード変換について
-
配列をnビットシフトする
-
間接操作のレベルとは
-
【C言語】構造体内の領域解放(...
-
c++ 文字列を入力して、一文字...
-
下記のプログラムがコンパイラ...
-
int main()の・・・
-
fgetsについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
構造体の各メンバにfor文からア...
-
fgetsなどのときのstdinのバッ...
-
文字列から空白を取り除きたい...
-
C言語のfor文です。 繰り返しの...
-
CStringをwchar_tに変換したい
-
間接参照のレベルが異なっています
-
c++ 文字列を入力して、一文字...
-
C言語の入力した文字を反転させ...
-
charからLPTSTRへの変換方法
-
ネットワークにつながっている...
-
'const char *' 型は 'char *' ...
-
テキストデータをそのままバイ...
-
c言語でユーザ関数を利用して入...
-
atoi( ) の反対をやりたい
-
間接操作のレベルとは
-
-'0'の意味について
-
double型の値をchar配列に変換...
-
Linuxでフォルダ内全ファイル名...
-
配列をnビットシフトする
-
型変換
おすすめ情報