Не удается прочитать файл /sys/kernel/debug/irq_domain_mapping, хотя с разрешением «чтение»

#c #linux #permission-denied

#c #linux #в разрешении отказано

Вопрос:

Я столкнулся с этой очень странной проблемой. Я написал C-функцию для чтения значения из пути «/sys/kernel /debug/irq_domain_mapping» на моей операционной системе Linux. Хотя у этого файла есть разрешение «чтение» для всех пользователей / групп / других, но моя функция все еще не смогла прочитать его содержимое.

Не могли бы вы, пожалуйста, помочь мне с некоторыми возможностями для решения этой проблемы. Это довольно странно, и я впервые это получил.

Заранее спасибо.

 /* Define the file path */
#define HAL_IRQ_DOMAIN_MAP_FILE     "/sys/kernel/debug/irq_domain_mapping" /**< irq map file location and mapping */

/* Open the file with permission read */
FILE *fp = NULL;
fp = fopen(HAL_IRQ_DOMAIN_MAP_FILE, "r");
if (fp == NULL) {
    tpLOG_osErr("fopen", HAL_IRQ_DOMAIN_MAP_FILE);
    return errno;
}
  

Но не удается прочитать файл

 Oct 3 01:12:59    fopen /sys/kernel/debug/irq_domain_mapping failed: 'Permission denied'
  

Хотя файл имеет разрешение на чтение для всех

 [root@]#ls -la /sys/kernel/debug/irq_domain_mapping
ls -la /sys/kernel/debug/irq_domain_mapping
**-r--r--r--    1 root     root             0 Jan  1  1970 /sys/kernel/debug/irq_domain_mapping**
  

Комментарии:

1. /sys/kernel/debug Каталог обычно является исполняемым и доступен для чтения только root .

2. Привет, Кайлум, не могли бы вы помочь предоставить более подробную информацию, моя функция фактически читает файл в / sys / kernel / debug, так почему он не может прочитать????

3. В Linux вы не можете получить доступ к файлу, если каталог, в котором он находится, не является исполняемым. Получаемое вами «разрешение отклонено» на самом деле относится к каталогу, а не к файлу. Попробуйте sudo chmod o rx /sys/kernel/debug . Но обратите внимание, что разрешения вернутся при перезагрузке.

4. Я понял вашу точку зрения. ваш комментарий имеет смысл для меня. Но я боюсь, что это не так. Потому что, когда моя плата загружается, она запускает скрипт такого рода для установки соответствующего разрешения: chmod 755 /sys/kernel/debug ; chgrp power /sys/kernel/debug/irq_domain_mapping

5. Вы отладили его в командной строке? То есть, можете ли вы получить доступ к этому файлу как некорневой пользователь из командной строки?