为什么mkdir无法使用波浪号(〜)?

时间:2010-09-01 09:24:30

标签: c++ c linux shell mkdir

写作时

mkdir("~/folder1" , 0777);
在Linux中,它无法创建目录。如果我用扩展的主目录替换~,它可以正常工作。使用~有什么问题?

由于

3 个答案:

答案 0 :(得分:27)

只有shell知道

~,而不知道mkdir系统调用。

但如果你尝试:

system("mkdir ~/foo");

"mkdir ~/foo"传递给shell并且shell将~扩展为$HOME

时,这是有效的

如果您想将$HOMEmkdir一起使用,则可以将getenv功能用作:

char path[MAX];
char *home = getenv ("HOME");
if (home != NULL) {
        snprintf(path, sizeof(path), "%s/new_dir", home);
        // now use path in mkdir
        mkdir(path, PERM);
}

答案 1 :(得分:12)

~是一个shell元字符,而不是内核提供的“快捷方式”。

如果您想轻松支持~,请参阅wordexp(3)glob(3)手册页。 (他们可能做的比你想要的多得多。)

答案 2 :(得分:5)

~通常由shell扩展。不使用shell意味着你负责扩展它。