#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. Вы отладили его в командной строке? То есть, можете ли вы получить доступ к этому файлу как некорневой пользователь из командной строки?