/* 2016/09/24 1.0 新規作成 */ #include #include #include #include #include #include "MultiPing.h" /* pingコマンドの出力結果を編集する */ char* searchWord( char* pBuf ) { char* pos; pos = strstr( pBuf, "ttl=" ); if ( pos != NULL ) { return "OK\n"; } return "Unreachable\n"; } void* myThread( void* pParam ) { // printf( "My Thread start!!\n" ); HostInfo* hi = ( HostInfo* )pParam; // printf( "hi:%s/%s<\n", hi->pHostName, hi->pIP ); FILE* fp; char cmd[256]; char buf[256]; char buf2[256]; memset( buf, 0x00, sizeof( buf ) ); // pingコマンド文字列の生成 memset( cmd, 0x00, sizeof( cmd ) ); sprintf( cmd, "ping -c 1 -W 5 %s", hi->pIP ); // コマンド実行 fp = popen( cmd, "r" ); int i = 0; for ( i = 0; ; i++ ) { // 実行結果を読み込む if ( fgets( buf, 256, fp ) == NULL ) { break; } if ( i != 1 ) { // 2行目以外は検査しない continue; } char* msg = searchWord( buf ); memset( buf2, 0x00, sizeof( buf2 ) ); sprintf( buf2 , "%s %s %s" , hi->pHostName , hi->pIP , msg ); ( void )fputs( buf2, stdout ); } ( void )pclose( fp ); // printf( "My Thread end!!\n" ); /* スレッド終了 */ pthread_exit( 0 ); }