12

当我写

mkdir("~/folder1" , 0777);

在linux中,创建目录失败。如果我用~扩展的主目录替换它,它工作正常。使用有什么问题~

谢谢

4

3 回答 3

31

~只有shell知道,mkdir系统调用不知道。

但如果你尝试:

system("mkdir ~/foo");

这在"mkdir ~/foo"传递给 shell 并且 shell 扩展~$HOME

如果你想使用$HOMEwith mkdir,你可以使用这个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);
}
于 2010-09-01T09:28:07.877 回答
12

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

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

于 2010-09-01T09:27:12.853 回答
5

~通常由外壳扩展。不使用外壳意味着您负责扩展它。

于 2010-09-01T09:26:53.330 回答