DISK 상태 확인하기.
글쓴이: park7275 / 작성시간: 월, 2003/09/22 - 11:34오전
지난번 질문을 한 번 했었는데요.
SNMP를 하시라고 했는데. 사정상 SNMP는 사용 할 수 없어서.
다시 질문드립니다.
/etc/mnttab에 entry를 가져와서 check를 하는데.
unix file system 으로 된것만 확인하는데요.
실제 이 파티션에 문제가 발생했는지를 어떻게 확인 할 수 있을까요?
듣기로는 unmount 된 파티션을 읽을면
process 자체가 block 된다는 얘기도 있고.
가장 효율적으로 이 문제에 접근 할 수 있는 방법이 없을까요?
그리고 추가적인 질문인데요.
만약 lan card자체에 문제가 발생하면 ifconfig 로 확인하면 UP이
down으로 처리된다던지 문제 발생이 ifconfig로 확인 되는지? 알고 싶습니다.
그럼 요즘 환절기에 감기 조심하시고 (쿨럭....감기가...타자까지 힘든상황...ㅜㅜ)
즐거운 하루 되세요~~~
Forums:


도움이 될지 모르겠습니다만...
두번째 질문에 대한 관련 소그가 있는것 같아 올립니다.
#if !defined(DEF_ifconfig_c) #define DEF_ifconfig_c "ifconfig.c" #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net/if.h> #include <netinet/if_ether.h> #include <arpa/inet.h> #include <netdb.h> int main(int s_Argc, char **s_Argv); int main(int s_Argc, char **s_Argv) { int s_SocketHandle; int s_RequestCount = 10; struct ifconf s_ifconfig; struct ifreq *s_ifrequest; struct sockaddr_in *s_SockAddr_In; char s_StringBuffer[1 << 10]; char *s_MyTitle; char *s_MyDevice; char *s_MyIP, *s_MyBroadcastIP, *s_MyNetmaskIP; char *s_MyHWAddr; char *s_MyFlagString; int s_MyFlags, s_MyMTU, s_MyMetric; fprintf(stdout, "MZ_ifconfig v0.0.1b - Copyright(c)InfoEQ co.,LTD - %s %s\n", __DATE__, __TIME__); fprintf(stdout, "Code by JaeHyuk Cho - <minzkn@infoeq.co.kr>\n\n"); s_SocketHandle = socket(AF_INET, SOCK_DGRAM, 0); if(s_SocketHandle >= 0) { memset((void *)&s_ifconfig, 0, sizeof(struct ifconf)); do { if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf); s_ifconfig.ifc_len = sizeof(struct ifreq) * s_RequestCount; s_ifconfig.ifc_buf = malloc(s_ifconfig.ifc_len); if(s_ifconfig.ifc_buf) { if(ioctl(s_SocketHandle, SIOCGIFCONF, &s_ifconfig) == 0) { if(s_ifconfig.ifc_len < (sizeof(struct ifreq) * s_RequestCount)) { s_ifrequest = s_ifconfig.ifc_req; if(s_ifrequest) { for(s_RequestCount = 0;s_RequestCount < s_ifconfig.ifc_len;s_RequestCount += sizeof(struct ifreq), s_ifrequest++) { /* ------------------------------------------------------------------------ */ s_MyDevice = strdup(s_ifrequest->ifr_name); ioctl(s_SocketHandle, SIOCGIFADDR, s_ifrequest); s_SockAddr_In = (struct sockaddr_in *)(&s_ifrequest->ifr_addr); s_MyIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); ioctl(s_SocketHandle, SIOCGIFBRDADDR, s_ifrequest); s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_broadaddr; s_MyBroadcastIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); ioctl(s_SocketHandle, SIOCGIFNETMASK, s_ifrequest); s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_netmask; s_MyNetmaskIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); if(ioctl(s_SocketHandle, SIOCGIFHWADDR, s_ifrequest) == 0) { unsigned char s_NullHWAddr[] = {0, 0, 0, 0, 0, 0}; if(memcmp(&s_ifrequest->ifr_hwaddr.sa_data[0], &s_NullHWAddr[0], sizeof(s_NullHWAddr)) == 0) { strcpy(s_StringBuffer, ""); } else { sprintf(s_StringBuffer, "HWAddr %02x:%02x:%02x:%02x:%02x:%02x", s_ifrequest->ifr_hwaddr.sa_data[0] & 0xff, s_ifrequest->ifr_hwaddr.sa_data[1] & 0xff, s_ifrequest->ifr_hwaddr.sa_data[2] & 0xff, s_ifrequest->ifr_hwaddr.sa_data[3] & 0xff, s_ifrequest->ifr_hwaddr.sa_data[4] & 0xff, s_ifrequest->ifr_hwaddr.sa_data[5] & 0xff ); } } else strcpy(s_StringBuffer, "HWAddr <ERROR>"); s_MyHWAddr = strdup(s_StringBuffer); if(ioctl(s_SocketHandle, SIOCGIFFLAGS, s_ifrequest) == 0)s_MyFlags = s_ifrequest->ifr_flags; else s_MyFlags = 0; strcpy(s_StringBuffer, ""); if(s_MyFlags == 0)strcpy(s_StringBuffer, "[NO FLAGS]"); else { if(s_MyFlags & IFF_UP )strcat(s_StringBuffer, "UP "); if(s_MyFlags & IFF_BROADCAST )strcat(s_StringBuffer, "BROADCAST "); if(s_MyFlags & IFF_DEBUG )strcat(s_StringBuffer, "DEBUG "); if(s_MyFlags & IFF_LOOPBACK )strcat(s_StringBuffer, "LOOPBACK "); if(s_MyFlags & IFF_POINTOPOINT )strcat(s_StringBuffer, "POINTOPOINT "); if(s_MyFlags & IFF_NOTRAILERS )strcat(s_StringBuffer, "NOTRAILERS "); if(s_MyFlags & IFF_RUNNING )strcat(s_StringBuffer, "RUNNING "); if(s_MyFlags & IFF_NOARP )strcat(s_StringBuffer, "NOARP "); if(s_MyFlags & IFF_PROMISC )strcat(s_StringBuffer, "PROMISC "); if(s_MyFlags & IFF_ALLMULTI )strcat(s_StringBuffer, "ALLMULTI "); if(s_MyFlags & IFF_SLAVE )strcat(s_StringBuffer, "SLAVE "); if(s_MyFlags & IFF_MASTER )strcat(s_StringBuffer, "MASTER "); if(s_MyFlags & IFF_MULTICAST )strcat(s_StringBuffer, "MULTICAST "); } s_MyFlagString = strdup(s_StringBuffer); s_MyTitle = strdup("Unknown"); /* Not support */ if(ioctl(s_SocketHandle, SIOCGIFMTU, s_ifrequest) == 0)s_MyMTU = s_ifrequest->ifr_mtu; else s_MyMTU = 0; if(ioctl(s_SocketHandle, SIOCGIFMETRIC, s_ifrequest) == 0)s_MyMetric = s_ifrequest->ifr_metric; else s_MyMetric = 0; /* Print. */ fprintf(stdout, "%-8s Link encap:%s %s\n" "%-8s inet addr %-15s Broadcast %-15s Netmask %-15s\n" "%-8s %s MTU:%d Metric:%d\n" "\n", s_MyDevice, s_MyTitle, s_MyHWAddr, "", s_MyIP, s_MyBroadcastIP, s_MyNetmaskIP, "", s_MyFlagString, s_MyMTU, s_MyMetric ? s_MyMetric : 1 ); /* Free. */ if(s_MyTitle )free(s_MyTitle); if(s_MyDevice )free(s_MyDevice); if(s_MyIP )free(s_MyIP); if(s_MyBroadcastIP)free(s_MyBroadcastIP); if(s_MyNetmaskIP )free(s_MyNetmaskIP); if(s_MyHWAddr )free(s_MyHWAddr); if(s_MyFlagString )free(s_MyFlagString); /* ------------------------------------------------------------------------ */ } } break; } else s_RequestCount += 10; } else break; } else break; }while(1); if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf); close(s_SocketHandle); } else fprintf(stderr, "Can not open socket !!!\n"); return(0); } #endif이곳 게시판에서 찾은 겁니다. 수고하세요~ *^^*
H/W가 컴퓨터의 심장이라면 S/W는 컴퓨터의 영혼이다!
댓글 달기