2014-03-28 2 views
0

정적 IP 주소가 192.168.1.17 인 네트워크 (내 고정 IP 만 사용하는 Wi-Fi)에 장치가 있습니다. 나는 리눅스의 C++ 프로그램에서 코드의 일부를 입력으로 사용하지만, 연결이 끊어 지거나 전원이 꺼지면 존재하지 않는 위치에서 데이터를 가져 오기 때문에 프로그램이 응답을 멈 춥니 다. 제어가 끊어지기 전에 프로그램을 중단 할 수 있도록 연결이 끊어 졌는지 확인할 수있는 방법이 있습니까? 내가 알고있는 도움이되는 응답에 감사드립니다!lan 장치가 linux에서 C++을 사용하여 연결되어 있는지 확인하십시오.

struct ifreq ifr; 

memset(&ifr, 0, sizeof(ifr)); 
strcpy(ifr.ifr_name, ifrname); 

if(ioctl(dummy_fd, SIOCGIFFLAGS, &ifr) != -1) 
{ 
    up_and_running = (ifr.ifr_flags & (IFF_UP | IFF_RUNNING)) == (IFF_UP | IFF_RUNNING); 
} 
else 
{ 
    // error 
} 

입력 변수가 ifrname입니다 : 확인

+0

NetworkManager를 사용하는 경우 API를 사용할 수 있습니다 (https://wiki.gnome.org/Projects/NetworkManager). D-Bus API, GLib 래핑을 사용할 수 있습니다. http://sourceforge.net/apps/mediawiki/dbus-cplusplus/index.php?title=Main_Page –

+0

192.168.1.17에서 코드 실행 위치는 어디입니까 ?? –

답변

0

사용 ioctl을 SIOCGIFFLAGS는 인터페이스 UP 및 RUNNING입니다.

dummy_fd = socket(AF_INET, SOCK_DGRAM, 0); 
: ioctl()가 매개 변수로 파일 기술자를 필요로하기 때문에 그것은 당신이 예를 들어 그 일부의 임시 UDP 소켓을 사용할 수

.... "인터페이스 이름"eth0를 ", eth1를", "ppp0로해야한다 더 이상 사용하지 않을 때

소켓을 종료해야합니다.

을 매우 낮은 수준을 가서 ioctl(7)을 사용하는 방법을 참조하십시오. 예를 들어 아담 리시에 의해 lsif를 참조하십시오.

0

를 진행하기 전에 핑 192.168.1.17에 시도

int status = system("ping -c 2 192.168.1.17"); 
if (-1 != status) 
{ 
    ping_ret = WEXITSTATUS(status); 

    if(ping_ret==0) 
     cout<<"Ping successful"<<endl; ////Proceed 
    else 
     cout<<"Ping not successful"<<endl; ///Sleep and agin check for ping 
} 
관련 문제