我不明白为什么在创建目录 mkdir 后会返回不同的值。在此示例中,我尝试创建目录 ,如果不是 ,因此错误处理 否则 转到此目录 如果不是 所以错误处理。
但它不能按我的意愿工作! 这表明我未能创造出来。但实际上创建了目录。 如果我读取参考权,则成功时返回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");
答案 0 :(得分:3)
看起来你需要围绕if
语句体的大括号,以便else
绑定到正确的if
语句。
答案 1 :(得分:2)
成功完成后,mkdir()将返回0.否则,将返回-1,不应创建任何目录,并设置errno以指示错误。
现在,请记住,在C 0
评估为false
时,非零评估为true
。因此,当您检查if( mkdir( ... ) )
时,您实质上是在询问mkdir
是否返回非零值。并且-1不为零,因此您询问mkdir()
是否失败,而不是mkdir()
是否成功。
您要做的是if( mkdir ( ... ) == 0 )
。
此外,如果发生故障,您没有理由认为失败的原因是“拒绝访问”#34;错误。检查errno
并相应地报告错误。
答案 2 :(得分:1)
正如John Carpenter正确诊断的那样,else
与第二个if
有关。使用大括号来避免这个被称为悬挂其他问题的错误。
您的代码中还有另一个问题:在Linux或BSD下,mkdir
的原型是:
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *path, mode_t mode);
您是否包含系统头文件?
未传递适当的权限,例如0777
调用未定义的行为,syscall包装器将传递不确定的权限,从而创建具有不一致权限的目录。
以下是更正后的版本:
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");
}