2014-09-27 16 views
1

proc 파일/proc // status의 마지막 n 바이트를 읽으려고합니다. 일반 파일에C의 proc 파일에서 마지막 n 바이트를 읽는 방법

는, 내가 좋아하는 파일의 끝에서 fseek의 수 :

fseek(proc_file, -BUF_SIZE, SEEK_END); 

하지만 proc 파일이 제로 크기를 가지고 있기 때문에,이 작동하지 않습니다.

끝에 읽는 방법에 대한 제안 사항이 있으십니까?

나는 끝까지 반복하는 것을 피하고 싶다.

답변

1

상태 파일이 작습니다. 그냥 처음 10000 바이트를 FREAD :

int fileLen = fread(statusFile, buffer, 10000); 

FREAD이 파일의 내용과 함께 파일의 바이트 수를 반환합니다. 그런 다음 파일의 끝을 확인할 수 있습니다.

마지막 몇 바이트 만 읽으면 이점이 없습니다. 파일 I/O 시스템은 버퍼링되므로 몇 바이트라도 요청하면 하위 레이어가 몇 개의 k를 읽을 수 있습니다.

+0

1024 바이트이면 충분합니다. $ (ls -1/proc | egrep '^ [0-9] + $')에있는 파일을 위해'; wc -c/proc/$ file/status 2>/dev/null을 수행하십시오. 완료 | sort -n'은 내 시스템에서 최소값은 532 였고 최대 값은 850이었습니다. 보수적 인 쪽에서는 아마도 실수로 4096이었습니다. – mpontillo

+2

WRT 버퍼링 : 이것은 일반적인 파일 시스템에는 해당되지만 procfs에는 해당되지 않습니다. 블록 장치가 지원하지 않으므로 캐싱이 없습니다. 읽기 작업은 커널이 직접 수행합니다. – duskwuff

+0

@Mike 클러스터에서 1k가 넘는 것을 보았지만 4k를 사용하게되었습니다. –