- ベストアンサー
ネットワークにつながっているかの確認
LINUXでC言語からsystem(ping 192.168.0.0)を実行して応答を確認、IPアドレスのPCがつながってるかどうか確認したいのですが、出来るでしょうか? 出来るとすれば、どのようにすればよいのでしょうか?
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。 No.1さんお答えのようにそのまま書けばOKですが、 Cプログラムの中から呼ぼうというのは特別わけがあるのでしょうか。 ping はエラーコードとしてリモートホストが正常にパケットに反応すれば0、 向こうが応答パケットを返してこなければ1、 ホストがダウンしているなら2を返します。 詳細は「man ping」で。 こんなプログラムをでっち上げてみました(仮称 pingpong.c)。 引数に任意のホスト名または IP アドレスを取れます。 $ pingpong www.example.org #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUF 64 #define CHECKCOUNT 5 int main(int argc, char *argv[]) { int result; char command[BUF]; char *hostptr = "192.168.0.0"; if (argc == 2) hostptr = argv[1]; if (strlen(hostptr) >= BUF-25) { fprintf(stderr, "Hostname too long.\n"); exit(4); } /* ping コマンドは饒舌で、-q をつけても完全には黙りません */ sprintf(command, "ping -q -c %d %s >/dev/null", CHECKCOUNT, hostptr); result = system(command); /* シェルスクリプトに戻り値を判断させたいなら以下は不要で すぐに return result; してください */ switch (result) { case 1: puts("No packets received."); return result; case 2: puts("Host unreachable"); return result; } return result; }
その他の回答 (1)
あなたがお書きになっている通りに、 #include <stdlib.h> int main() { system("ping -c 3 127.0.0.1"); } でできます。