Не удается прочитать стандартный файл – блок операций ввода-вывода

Я пишу программу, которая просматривает все файлы на устройстве Android, ища определенную строку. Через несколько секунд после этого процесса я застрял в следующем файле:

/ SYS / мощности / wakelock_count

Я попытался использовать grep , функцию C fopen , а также другие альтернативы, и все они блокируются в этом файле – они просто не возвращаются. Его размер составляет ровно 4096 байт, но с использованием stat или ls -l файл сообщается как обычный файл – без символической ссылки, нет файла устройства. Я проверил открытые дескрипторы – этот файл открывается системой system_se , что также позволяет удерживать дескрипторы десятков других файлов, которые я, однако, могу читать просто отлично. Я также проверил блокировки, и нет никаких MANDATORY- блокировок, которые предотвратили бы доступ к чтению.

Что такого особенного в этом файле и как я могу его прочитать или пропустить?

EDIT: Я выполняю все операции как SU.

EDIT2: ls -ld результат:

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

  • while цикл работает только один раз?
  • Почему этот скрипт зацикливается на первой строке файла txt?
  • Используя sed с herestring (<<<) и прочитайте -a
  • Длина строки режима чтения в приглашении bash
  • Чтение значений массива в качестве пользовательского ввода дает неправильную длину массива и только -a или -p работает при чтении
  • Символ ложных @ в начале подсказки bash в Debian Jessie
  • Есть ли разница между read, head -1 и sed 1q?
  • используйте команду «читать» для передачи строк в качестве позиционных параметров в сценарий оболочки
  • One Solution collect form web for “Не удается прочитать стандартный файл – блок операций ввода-вывода”

    Обратите внимание, что /sys/power/wakeup_count не является «обычным» файлом, потому что он не находится в «обычной» файловой системе. Это почти наверняка в файловой системе «sysfs-power», которая похожа на файловую систему «proc», поскольку она не представляет ничего подобного файлам на дисках.

    В документации файловой системы sysfs-power :

     What: /sys/power/wakeup_count Date: July 2010 Contact: Rafael J. Wysocki <rjw@rjwysocki.net> 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 вешает бесконечно. Это почти то же самое, что вы описываете.

    Linux и Unix - лучшая ОС в мире.