在 C 中错误处理 mkdir 和 chdir?
error handling mkdir and chdir in C?
我不明白为什么在创建目录后 mkdir return 不同的值。在这个例子中,我试图创建一个目录 if not 所以错误句柄 otherwise进入这个目录如果没有那么错误处理.
但是它并没有像我想要的那样工作!
它向我显示 'failed to create' 但实际上创建了目录。
如果我正确阅读参考资料,它 return 成功时为 0。
代码:
char* dirName = "Output";
FILE *output;
if(!mkdir(dirName))
if(chdir(dirName))
printf("Permission to open a new directory is denied");
else
printf("Permission to create a new directory is denied");
Upon successful completion, mkdir() shall return 0. Otherwise, -1 shall be returned, no directory shall be created, and errno shall be set to indicate the error.
现在,请记住,在 C 中 0
的计算结果为 false
,非零计算结果为 true
。因此,当您检查 if( mkdir( ... ) )
时,您实际上是在询问 mkdir
是否返回了非零值。 -1 是非零的,所以你问的是 mkdir()
是否失败,而不是 mkdir()
是否成功。
您想要做的是 if( mkdir ( ... ) == 0 )
。
此外,如果失败,您没有理由认为失败的原因是 "access denied" 错误。检查 errno
并相应地报告正确的错误。
您似乎需要将 if
语句主体括起来,以便 else
绑定到正确的 if
语句。
正如 John Carpenter 正确诊断的那样,else
与第二个 if
相关。使用大括号来避免这个称为悬空 else 问题的错误。
您的代码中还有一个问题:在 Linux 或 BSD 下,mkdir
的原型是:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *path, mode_t mode);
是否包含系统头文件?
没有传递适当的权限,例如0777
调用未定义的行为,系统调用包装器将传递不确定的权限,创建权限不一致的目录。
这是更正后的版本:
const char *dirName = "Output";
if (!mkdir(dirName, 0777)) {
if (chdir(dirName)) {
printf("Permission to open a new directory is denied");
}
} else {
printf("Permission to create a new directory is denied");
}
我不明白为什么在创建目录后 mkdir return 不同的值。在这个例子中,我试图创建一个目录 if not 所以错误句柄 otherwise进入这个目录如果没有那么错误处理.
但是它并没有像我想要的那样工作! 它向我显示 'failed to create' 但实际上创建了目录。 如果我正确阅读参考资料,它 return 成功时为 0。
代码:
char* dirName = "Output";
FILE *output;
if(!mkdir(dirName))
if(chdir(dirName))
printf("Permission to open a new directory is denied");
else
printf("Permission to create a new directory is denied");
Upon successful completion, mkdir() shall return 0. Otherwise, -1 shall be returned, no directory shall be created, and errno shall be set to indicate the error.
现在,请记住,在 C 中 0
的计算结果为 false
,非零计算结果为 true
。因此,当您检查 if( mkdir( ... ) )
时,您实际上是在询问 mkdir
是否返回了非零值。 -1 是非零的,所以你问的是 mkdir()
是否失败,而不是 mkdir()
是否成功。
您想要做的是 if( mkdir ( ... ) == 0 )
。
此外,如果失败,您没有理由认为失败的原因是 "access denied" 错误。检查 errno
并相应地报告正确的错误。
您似乎需要将 if
语句主体括起来,以便 else
绑定到正确的 if
语句。
正如 John Carpenter 正确诊断的那样,else
与第二个 if
相关。使用大括号来避免这个称为悬空 else 问题的错误。
您的代码中还有一个问题:在 Linux 或 BSD 下,mkdir
的原型是:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *path, mode_t mode);
是否包含系统头文件?
没有传递适当的权限,例如0777
调用未定义的行为,系统调用包装器将传递不确定的权限,创建权限不一致的目录。
这是更正后的版本:
const char *dirName = "Output";
if (!mkdir(dirName, 0777)) {
if (chdir(dirName)) {
printf("Permission to open a new directory is denied");
}
} else {
printf("Permission to create a new directory is denied");
}