что такое errno и EEXIST?
#include<errno.h>
if(errno != EEXIST) {
perror(sha1_dir);
exit(1);
}
Я не могу понять условие оператора if. это говорит, если errno не существует?
что такое errno и EEXIST?
#include<errno.h>
if(errno != EEXIST) {
perror(sha1_dir);
exit(1);
}
Я не могу понять условие оператора if. это говорит, если errno не существует?
Если вы покопаетесь в errno.h
, вы обнаружите, что EEXIST
— это макрос C, определенный в другом файле. На моем компьютере с Debian он находится в /usr/include/asm-generic/errno-base.h
.
#define EEXIST 17 /* File exists */
Запустите man errno
, чтобы найти значение переменной errno
:
DESCRIPTION
The <errno.h> header file defines the integer variable errno, which is
set by system calls and some library functions in the event of an error
to indicate what went wrong.
Таким образом, смысл блока кода состоит в том, чтобы проверить errno
, сгенерированный последней функцией, и, если это не файл существует (файл не существует), вывести сообщение об ошибке.
Запустите man perror
для получения дополнительной информации. Серьезно, вы должны изучить C из какой-нибудь книги, прежде чем задавать такой вопрос stackoverflow.
errno
не равноEEXIST
. - person mkrieger1   schedule 03.02.2021errno
, возможно, будет установлен вызовом какой-либо функции (это переменная, область действия которой должна быть локальной для потока). Проверьте настройку функцииerrno
, чтобы узнать, что означаетEEXIST
в контексте этой функции. - person Christian Gibbons   schedule 03.02.2021errno
, зависит от кода над той строкой, которую вы не показали. - person mkrieger1   schedule 03.02.2021#define EEXIST 17 /* File exists */
- person Christian Gibbons   schedule 03.02.2021mkdir()
для создания каталога. Если он попытался и не смог создать каталог, это, вероятно, ошибка. Но если каталог уже существует, программе не нужно его создавать, так что продолжайте. - person Steve Summit   schedule 03.02.2021errno
— это своего рода глобальная переменная, которая содержит код, указывающий, почему последний системный вызов не удался.<errno.h>
содержит набор констант --EPERM
,ENOENT
,EEXIST
и т. д., кодирующих причины отказа. И затемperror()
— это библиотечная функция, которая просматриваетerrno
и печатает удобочитаемую строку, такую как «Отказано в доступе», соответствующую коду вerrno
. См. также комментарии в этот недавний вопрос . - person Steve Summit   schedule 03.02.2021