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

Ste*_*eng 9 c c++ linux shell mkdir

当我写作

mkdir("~/folder1" , 0777);
Run Code Online (Sandbox Code Playgroud)

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

谢谢

cod*_*ict 27

~只知道shell而不是mkdir系统调用.

但如果你尝试:

system("mkdir ~/foo");
Run Code Online (Sandbox Code Playgroud)

这有效,因为"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);
}
Run Code Online (Sandbox Code Playgroud)

  • -1用于给出带有巨大缓冲区溢出问题的示例代码.您应该编辑它以使用snprintf或在调用`sprintf`之前检查`home`的长度. (10认同)

sar*_*old 12

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

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


Ign*_*ams 5

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