/* Bandwidth monitor - Written by Michael Hayes. * * Permission to use source is granted as long as it retains this tag. * */ #include #include #include #include #include //#define TRUE 1 //#define FALSE 0 static unsigned long int bosent; static unsigned long int borec; static unsigned long long int bsent; static unsigned long long int brec; static unsigned long int bsentrem; static unsigned long int brecrem; int main () { struct tm che; time_t thetime; long int old_time; FILE *fp; thetime = time(NULL); localtime_r(&thetime, &che); old_time = 100; printf("Beginning.\n\r\n\r"); while (old_time> -10) { thetime = time(NULL); localtime_r(&thetime, &che); if (old_time == che.tm_sec) continue; old_time = che.tm_sec; //if (fp != NULL) // parse_bytes(fp); if ((fp = fopen("/proc/net/dev","r")) == NULL) { printf("Unable to open proc file!\n\n"); return 0; } while (!feof(fp)) { unsigned char bline[500]; unsigned long int _brec=0; unsigned long int _bsent=0; fetchline(bline, 1000, fp); if (strstr(bline, "eth0:")) { char deli[] = " "; char *token, *buf; buf = strdup(&bline[7]); token = strtok(buf, deli); // bytes (rec) brec = strtoll(token, NULL, 0); token = strtok(NULL, deli); // packets token = strtok(NULL, deli); // errs token = strtok(NULL, deli); // drop token = strtok(NULL, deli); // fifo token = strtok(NULL, deli); // frame token = strtok(NULL, deli); // compressed token = strtok(NULL, deli); // multicast token = strtok(NULL, deli); // bytes (send) bsent = strtoll (token,NULL,0); token = strtok(NULL, deli); // packets token = strtok(NULL, deli); // errs token = strtok(NULL, deli); // drop token = strtok(NULL, deli); // fifo token = strtok(NULL, deli); // frame token = strtok(NULL, deli); // compressed token = strtok(NULL, deli); // multicast //int _brec,_bsent=0; if (bosent == 0 && borec == 0) { bosent = bsent; borec = brec; } _brec = brec - borec; _bsent = bsent - bosent; if (_bsent < 1024) bsentrem = _bsent; if (_brec < 1024) brecrem = _brec; _bsent = _bsent / 1024; _brec = _brec /1024; if (_brec % 1024 != 0) brecrem = _brec % 1024; if (_bsent % 1024 != 0) bsentrem = _bsent % 1024; printf("\e[1A\e[2K"); printf("Send: %6u.%-4ukB/s - Rec: %6u.%-4ukB/s\n",_bsent, bsentrem, _brec, brecrem); bosent = bsent; borec = brec; bsentrem=0; brecrem=0; } } fclose(fp); } return 0; } int fetchline(char s[], int lim, FILE *fp) { int c, i, j; for(i = 0, j = 0; (c = getc(fp))!=EOF && c != '\n'; ++i) { if(i < lim - 1) { s[j++] = c; } } if(c == '\n') { if(i <= lim - 1) { s[j++] = c; } ++i; } s[j] = '\0'; return i; }