간단한 디스크에 관한 통계를 보여주는 명령어.
Disk I/O는 시스템에서 가장 느린 리소스 중 하나
/proc/diskstats
#include <stdio.h>
#include <stdlib.h>
#define DISK_NAME "mmcblk0"
int main(){
FILE* diskstats_file;
char line[256];
char disk_name[32];
unsigned long sectors_read =0, sectors_written = 0, sectors_discard = 0;
diskstats_file = fopen("/proc/diskstats", "r");
if (diskstats_file == NULL){
perror("Failed to open /proc/diskstats");
exit(-1);
}
while(fgets(line, sizeof(line), diskstats_file)) {
unsigned long temp_sectors_read, temp_sectors_written, temp_sectors_discard;
//형식에 맞게 문자열을 파싱.
sscanf(line, "%*d %*d %s %*d %*d %lu %*d %*d %*d %lu %*d %*d %*d %*d %lu",
disk_name, &temp_sectors_read, &temp_sectors_written, &temp_sectors_discard);
if (strcmp(disk_name, DISK_NAME) == 0){
sectors_read = temp_sectors_read;
sectors_written = temp_sectors_written;
sectors_discard = temp_sectors_discard;
break;
}
}
fclose(diskstats_file);
printf("Sectors read (KB): %lu\n", sectors_read/2);
printf("Sectors written (KB): %lu\n", sectors_written/2);
printf("Sectors discard (KB): %lu\n", sectors_discard/2);
return 0;
}
다음과 같이 결과가 나오게 하기
/proc/net/tcp 가져오기
리틀 엔디안으로 이루어진 IP주소/ 포트번호를 빅 엔디안(192.168.x.x)로 표시되도록 한다.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DISK_NAME "netstat"
#define STATE_LENGTH 10
int main(){
FILE* netstat; //
char line[256];
char state[STATE_LENGTH];
unsigned int local_address = 0, port = 0 ;
netstat = fopen("/proc/net/tcp", "r");
if (netstat == NULL){
perror("Failed to open /proc/net/tcp");
exit(-1);
}
while(fgets(line, sizeof(line), netstat)) {
unsigned int temp_local_address, temp_port;
char temp_state[STATE_LENGTH];
//형식에 맞게 문자열을 파싱.
sscanf(line, "%*d: %x:%hx %*x:%hx %s IGNORE",
&temp_local_address, &temp_port, &temp_state);
//if (strcmp(disk_name, DISK_NAME) == 0){
local_address = temp_local_address;
port = temp_port;
strncpy(state, temp_state, STATE_LENGTH);
state[STATE_LENGTH -1] = '\0; // 값을 초과하지 않도록 보장
// break
// ;
//}
//
printf("Local Address: %x ",local_address );
printf("Port:%hx ",port );
printf("State: %s\n ",state );
}
fclose(netstat);
//printf("Local Address: %x ",local_address );
//printf("Port:%hx ",port );
//printf("State: %s ",state );
return 0;