네트워크 모니터링 관련하여.. /proc/net/dev 부분
글쓴이: PhuketDay / 작성시간: 수, 2006/10/18 - 6:11오후
/proc/net/dev 를 파일 열기 함수로 통해 읽어와서
eth0: 의 Receive 부분과 Transmit 부분을 읽어왔습니다.
제가 구하고자 하는것은 예를들면 초당 send,recv 트래픽을 구하는것이 목적인데
현재 값을 구해오고 1초 후의 값을 구해온후
1초 후에 Receive 값 - 1초 전의 Receive 값 을 하면
초당 변화된 Receive 값을 통해 recv 트래픽을 구할수 있는건가요?
그런데 문제는 예를들어 Receive 값이 10(ex : 10240000000) 기가 이상 이 되었다고 하였을때 자리수가 11자리가 됩니다
11 자리의 문자열을 숫자로 변환하려면 어떤것을 써야되는지.. atoll 을 사용했는데 에러가 나서 이렇게 질문 드립니다
그리고 윈도우 의 __int64 는 리눅스의 long long int 와 같다고 하던데 10자리 이상은 변수대입을 못하는거 같습니다
요지는
1. 네트워크 전송 트래픽 구하는 방법
2. 11 자리 문자열을 숫자로 변환하기 위한 함수 그리고 11자리 이상의 숫자를 대입할 변수 타입은 어떤 타입이 있는지 궁급 합니다
모두 좋은 하루 되세요~.
Forums:
..
long double in
sscanf(ptr,"%llu",&in);
직접 구현하시는것도 좋은 방법인데요. 가장 좋은것은 훌륭한 선배님들의 코드를 보면서 어떻게 만들었을까 하는것을 보면서 연습해보시는것도 좋은 방법일겁니다. 구굴에서 찾아 보시면 정말 수억 나올겁니다.
원하시는 코드는 네트웍 관련 가장 일반적인 코드들에 대부분 들어 있을겁니다.
strtoul() or strtoull()도 있습니다(냉무)
냉무
/***************************************
Being the one is just like being in love.
***************************************/
11자리 이상도 long long
11자리 이상도 long long int 로 됩니다.
아마
long long int a = 12345678901234567890;
이런식으로 입력 하셨겠죠?
C에서 정수상수는 int로 간주합니다.
이렇게 하시면 12345678901234567890 이 일단 int형으로 암묵적인 변환이 발생하고
변환된 int 를 a 에 대입하게 되는 꼴이 됩니다.
long long int a = 12345678901234567890LL;
위 처럼 숫자뒤에 LL을 넣어서 long long 임을 알려줘야 됩니다.
참고로
float f = 10.0;
이라고 하면 10.0 이란 하는 double 를 float 으로 형변환해서 f 에 대입하는 코드입니다.
C에서 실수상수는 기본이 double 이기 때문이죠.
float f = 10.0f;
라고 해야 float상수를 f에 대입하는 코드라고 할 수 있습니다./proc/net/dev 에서 얻어온 트래픽 값은 32bit 를 넘지 않을 듯 합니다.
아마 네트워크 디바이스 모듈도 그 정보를 저장하기 위해 32bit 를 사용했을 듯 하네요.
32bit 를 넘으면 0으로 리셋 될 듯 하네요.
댓글 달기