linux에서 대역폭 가져오는 방법
글쓴이: mini7510 / 작성시간: 월, 2004/08/16 - 7:32오후
linux에서 네트웍 정보 가지고 오는 코드입니다.
제가 가져오고 싶은 정보는 대역폭 입니다.
이 예제되로 하면 대역폭 정보가 이상하게 나오는데
어떻게 해야 대역폭 정보를 가져올수 있는지 알고 싶습니다.
아시고 계신분은 좋은 답변부탁드립니다.
#include <sys/ioctl.h> #include <sys/types.h> #include <sys/stat.h> #include <sys/socket.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <net/if.h> #include <arpa/inet.h> int main() { struct ifreq *ifr; struct sockaddr_in *sin; struct ifconf ifcfg; int fd; int n; int numreqs = 30; fd = socket(AF_INET, SOCK_DGRAM, 0); memset(&ifcfg, 0, sizeof(ifcfg)); ifcfg.ifc_buf = NULL; ifcfg.ifc_len = sizeof(struct ifreq) * numreqs; ifcfg.ifc_buf = (char *)malloc(ifcfg.ifc_len); for(;;) { ifcfg.ifc_len = sizeof(struct ifreq) * numreqs; ifcfg.ifc_buf = (char *)realloc(ifcfg.ifc_buf, ifcfg.ifc_len); if (ioctl(fd, SIOCGIFCONF, (char *)&ifcfg) < 0) { perror("SIOCGIFCONF "); return 0; } printf("%d : %d \n", ifcfg.ifc_len, sizeof(struct ifreq)); break; } ifr = ifcfg.ifc_req; for (n = 0; n < ifcfg.ifc_len; n+= sizeof(struct ifreq)) { printf("%s\n", ifr->ifr_name); sin = (struct sockaddr_in *)&ifr->ifr_addr; printf("IP %s\n", inet_ntoa(sin->sin_addr) ); if ( (sin->sin_addr.s_addr) == INADDR_LOOPBACK) { printf("Loop Back\n"); } ioctl(fd, SIOCGIFBRDADDR, (char *)ifr); sin = (struct sockaddr_in *)&ifr->ifr_broadaddr; printf("BROD %s\n", inet_ntoa(sin->sin_addr)); ioctl(fd, SIOCGIFNETMASK, (char *)ifr); sin = (struct sockaddr_in *)&ifr->ifr_addr; printf("MASK %s\n", inet_ntoa(sin->sin_addr)); ioctl(fd, SIOCGIFMTU, (char *)ifr); printf("MTU %d\n", ifr->ifr_mtu); ioctl(fd, SIOCGIFINDEX, (char *)ifr); printf("BAND %d %d\n", ifr->ifr_ifindex, ifr->ifr_bandwidth); printf("\n"); ifr++; } }
[/b]
Forums:
댓글 달기