错误处理C中的mkdir和chdir?

时间:2015-12-02 15:10:51

标签: c mkdir

我不明白为什么在创建目录 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");

3 个答案:

答案 0 :(得分:3)

看起来你需要围绕if语句体的大括号,以便else绑定到正确的if语句。

答案 1 :(得分:2)

根据the documentation of mkdir

  

成功完成后,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");
}