일반 파일을 읽을 수 없습니다 - IO 작업 블록

일반 파일을 읽을 수 없습니다 - IO 작업 블록

저는 특정 문자열을 찾기 위해 Android 장치의 모든 파일을 검색하는 프로그램을 작성 중입니다. 전체 프로세스가 진행되는 데 몇 초가 지났는데 다음 파일이 막혔습니다.

/sys/power/wakelock_count

나는 사용하려고grep,C 함수포펭및 기타 대안은 모두 해당 파일의 IO를 차단하며 절대 반환되지 않습니다. 크기는 정확히 4096바이트이지만통계자료또는ls-l파일은 다음과 같이 보고됩니다.일반 파일- 심볼릭 링크나 장치 파일이 없습니다. 열린 핸들을 확인했습니다. 파일은 다음을 통해 액세스되었습니다.시스템_SE, 수십 개의 다른 파일에 대한 핸들도 보유하고 있지만 잘 읽을 수 있습니다. 자물쇠도 확인해봤는데 아니필수적인읽기 액세스를 방지하는 잠금입니다.

이 파일의 특별한 점은 무엇입니까? 어떻게 읽거나 건너뛸 수 있나요?

편집: 저는 모든 것을 SU로 실행하고 있습니다.

편집 2:LS-LD결과:

-rw-r--r-- 1 system system 4096 1971-10-10 21:59 wakeup_count

답변1

이 파일은 /sys/power/wakeup_count"일반" 파일 시스템에 있지 않기 때문에 실제로는 "일반" 파일이 아닙니다. "sysfs-power" 파일 시스템에서는 실제로 디스크의 파일과 같은 것을 나타내지 않는다는 점에서 "proc" 파일 시스템과 거의 확실히 유사합니다.

모든파일 sysfs-power시스템 문서:

What:       /sys/power/wakeup_count
Date:       July 2010
Contact:    Rafael J. Wysocki <[email protected]>
Description:
        The /sys/power/wakeup_count file allows user space to put the
        system into a sleep state while taking into account the
        concurrent arrival of wakeup events.  Reading from it returns
        the current number of registered wakeup events and it blocks if
        some wakeup events are being processed at the time the file is
        read from.  Writing to it will only succeed if the current
        number of wakeup events is equal to the written value and, if
        successful, will make the kernel abort a subsequent transition
        to a sleep state if any wakeup events are reported after the
        write has returned.

따라서 읽기 중단은 문제가 되지 않을 수 있지만, 위의 문서를 고려하면 오랜 시간 동안 중단되는 것 같지는 않습니다.

그러나 다음과 같은 오류가 발생할 가능성이 높습니다. /sys/power/wakeup_count에서 읽는 것이 무기한 중단됩니다. 말씀하신 증상과 거의 동일합니다.

답변2

특정 문제가 있는지 여부에 관계없이 /sys/power/wakeup_count대답은 /sys파일 시스템의 파일이 특수한 가상 파일이라는 것입니다. 이를 읽고 쓰면 커널 기능에 액세스할 수 있습니다. 또는 다른 가상 파일 시스템의 일부 파일은 /sys특정 이벤트가 발생할 때까지 읽기가 차단될 수 있습니다.

제외 /sys하고 /proc. 명명된 소켓, 명명된 파이프 또는 장치 파일(예: /dev. 유닉스 웨이(TM).

현재 Linux에서는 자동 특수 가상 파일 시스템 마운트 가 모두 /dev, 및 아래에 있습니다 /sys. 노인들도 이 증상을 가질 수 있습니다 . 이제 새로운 특수 파일 시스템의 덤프 위치 역할을 하므로 나중에 새로운 특수 경로를 추가하는 것에 대해 걱정할 필요가 없습니다 ./proc/var/lib/nfs/rpc_pipefs//selinux/sys/fs

전통적인 접근 방식은 특정 파일 시스템만 검색하는 것입니다. 예를 들어 특수하지 않은 모든 파일 시스템 나열을 find -xdev사용할 수 있습니다 . df예를 들어 //home가 검색하려는 별도의 파일 시스템인 경우:

find / /home -xdev -type f -exec grep search-string \{\} \+

관련 정보