C++ 为什么mkdir无法使用tilde(~)?

C++ 为什么mkdir无法使用tilde(~)?,c++,c,linux,shell,mkdir,C++,C,Linux,Shell,Mkdir,当我写作时 mkdir("~/folder1" , 0777); 在linux中,它无法创建目录。如果我用扩展的主目录替换~,它就可以正常工作。使用~有什么问题 谢谢~通常由shell扩展。不使用shell意味着您要负责扩展它。~是shell元字符,而不是内核提供的“快捷方式” 如果要轻松支持~,请参阅或手册页。(它们可能做的比您想要的多得多。)~只为shell所知,而不为mkdir系统调用所知 但如果你尝试: system("mkdir ~/foo"); 这是因为“mkdir~/foo”被

当我写作时

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


谢谢

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

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


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

~
只为shell所知,而不为
mkdir
系统调用所知

但如果你尝试:

system("mkdir ~/foo");
这是因为
“mkdir~/foo”
被传递到shell,shell将
~
扩展到
$HOME

如果您想将
$HOME
mkdir
一起使用,您可以使用以下功能:

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给出了具有巨大缓冲区溢出问题的示例代码。在调用
sprintf
@R..GitHubSTOPHELPINGICE之前,您应该编辑此文件以使用snprintf或检查
home
的长度,或者您可能是一名程序员,知道主目录的最大长度,并且您知道
max
至少是该大小或更大。这些功能实际上是为那些不知道自己在做什么的人设计的。这就是为什么在过去人们知道如何编程时它们不存在的原因。@Deanie:环境变量
HOME
的值没有最大长度,即使有效路径名有最大长度。编写的代码会受到缓冲区溢出的影响,编写这样的错误代码与“知道如何编程”正好相反。(感谢o11c提供的
glob(3)
条目;它不做
~
,但仍然有用。)是的,请参阅该页面中的
glob TILDE
(和
glob TILDE\u CHECK
)。