내가 이해한 바에 따르면 Linux/UNIX에서 시스템 정보를 얻는 파일은 일반 파일이 아니라 장치 파일이지만 불규칙해 보이는 파일( ls 에 의해 결정되는 동작과 크기 및 기타 C 함수로 인해)을 발견했습니다. 그러나 있는 그대로 나열됩니다(sh 스크립트에서 ls 및 -f로 테스트할 때).
Raspberry Pi에서 파일이 있는 경로 /sys/class/thermal/thermal_zone0/temp
, ls 결과는 다음과 같습니다.
-r--r--r-- 1 root root 4096 janv. 18 13:55 /sys/class/thermal/thermal_zone0/temp
장치 파일인 경우 c
또는이 있어야 합니다.b
문제는 감지된 파일 크기가 4096바이트인데 실제 파일 크기는 훨씬 작다는 점입니다.
그래서 몇 가지 질문이 있습니다. 왜 이 파일이 특수 파일로 나열되지 않습니까? 이러한 파일을 효율적으로 감지하려면 어떤 C 함수를 사용해야 하며, "제한된 크기" 파일인 경우 해당 콘텐츠의 크기를 측정하는 방법은 무엇입니까?
감사해요
답변1
이러한 파일 은 실제로 실제 파일 시스템이 아니고 커널에 대한 인터페이스와 비슷하기 때문에 /proc
및 에서만 이러한 파일을 거의 볼 수 있습니다 . /sys
나는 장치가 메이저/마이너 번호로 식별되고 그것을 사용 proc
하지 않고 sysfs
그 안에 있는 가상 파일을 식별하는 다른 수단을 사용하기 때문에 장치 노드로 표시되지 않는다고 가정합니다.
/proc
또는 의 파일에 액세스하는 데 사용되는 프로그램이 거의 없기 때문에 이를 식별하는 것은 일반적으로 문제가 되지 않습니다 /sys
. 이들 중 다수의 경우 데이터가 동적으로 생성되므로 모든 것을 읽는 것 외에는 크기를 측정할 수 있는 방법이 없을 수 있습니다. 예를 들어, 내가 테스트한 파일의 경우 끝까지 조회가 유용하지 않았으며 해당 크기를 광고한 파일의 경우 콘텐츠의 실제 크기에 관계없이 조회는 위치 4096으로 이동했습니다.