【发布时间】:2025-12-08 10:10:01
【问题描述】:
-
在调用函数之前我们需要将
errno重置为零吗?请参见下面的代码。现在的场景是a_dest_path是一个现有目录。但是当我执行代码时,它总是尝试mkdir但返回错误表示无法创建目录,因为它存在。在 GDB 中,我在调用opendir()之前检查了errno,而errno是2。在调用opendir()期间,errno似乎没有设置为零。那么在调用opendir()之前是否需要将errno重置为零? -
errno可以在system()调用中更改,然后在我的else if分支中,我检查来自system()但不是opendir()的结果。那么在opendir()之后,我是否需要将errno分配给一个变量,然后在if..elseif..else分支中检查这个变量?
DIR *dp = opendir(a_dest_path.c_str());
if (errno == ENOENT) {
string mkdir_comman = "mkdir " + a_dest_path;
system(mkdir_command.c_str());
} else if (errno == ENOTDIR) {
printf("Destination %s exists but is not directory\n", a_dest_path.c_str());
return k_error_not_directory;
} else if (errno == 0) {
closedir(dp);
}
【问题讨论】:
-
对于 2。我认为您误解了
if() {} else if () {}的工作原理。如果第一个if条件为真,则不会测试else if条件 -
清除
errno仅在您调用的函数不表示其返回值存在错误时才需要(例如,返回类型为void的函数和返回的函数值的域对于正常和非错误值是完全有意义的)。