Повторяющиеся значения для errno на странице руководства

Взлом NAS на базе Debian

Iomega готовит ограниченную установку debian, хранящуюся в необработанных образах дисков , расположенных на / boot (нажмите losetup -a , чтобы увидеть привязки цикла). вы можете либо:

  1. изменить образы, хранящиеся в / boot , это серьезная работа, и если вы сделаете какую-нибудь ошибку, ваш nas станет непригодным для использования.

  2. Не трогайте ничего в / boot , но вы не можете использовать apt оттуда. Вы должны скопировать распакованные файлы .deb в каталог, расположенный в папке / mnt / pool , и создать символические ссылки.

Я выбираю менее разрушительный путь.

  1. Храните все свои материалы на жестком диске, где-нибудь в папке / mnt / pool /

  2. . Создайте символические ссылки, чтобы привязать свои данные к / usr / local /

  3. Если вам действительно нужен доступ /, вам необходимо перемонтировать их с помощью mount -o remount, rw /

1
13.07.2017, 21:54
1 ответ

Does this mean that EACCES could be any of these things? Or less likely all of them?

Любой. Что касается «всех», если есть ошибка обхода пути, как код вообще сможет попробовать другие вещи, такие как «это обычный файл», если у кода нет разрешения на переход к файлу? Кроме того, возврат нескольких ошибок на самом деле не является тем, что C делает по умолчанию (, если только вы не написали какую-то структуру, содержащую список ошибок, а затем указатель на эту структуру каким-то образом возвращается вызывающей стороне, которой затем нужно... и это не так, как написано большинство системных вызовов.)

How can I tell them apart when handling errors from a switch statement?

strerror(errno)или изящный err(3), который, несомненно, в свою очередь вызывает strerror— это самое большее, что вы получите:

$ cat sirexecsalot.c
#include <err.h>
#include <string.h>
#include <unistd.h>
extern char **environ;
extern int errno;
int main(int argc, char *argv[])
{
    int ret;
    errno = 0;
    if ((ret = execve("/var/tmp/exectest/hullo", ++argv, environ)) == -1)
        err(1, "nope (strerr=%s)", strerror(errno));
}

$ make sirexecsalot
cc     sirexecsalot.c   -o sirexecsalot
$ cat /var/tmp/exectest/hullo
#!/usr/bin/env expect
puts hi

$./sirexecsalot
hi
$ mv /var/tmp/exectest/hullo /var/tmp/exectest/foo
$ mkdir /var/tmp/exectest/hullo
$./sirexecsalot              
sirexecsalot: nope (strerr=Permission denied): Permission denied
$ chmod 000 /var/tmp/exectest 
$./sirexecsalot             
sirexecsalot: nope (strerr=Permission denied): Permission denied
$ 
2
27.01.2020, 23:33

Теги

Похожие вопросы