Steveng Steveng - 7 months ago 42
Bash Question

Why mkdir fails to work with tilde (~)?

When I write

mkdir("~/folder1" , 0777);


in linux, it failed to create a directory. If I replace the
~
with the expanded home directory, it works fine. What is the problem with using
~
?

Thanks

Answer

~ is known only to the shell and not to the mkdir system call.

But if you try:

system("mkdir ~/foo");

this works as the "mkdir ~/foo" is passed to a shell and shell expands ~ to $HOME

If you want to make use of the $HOME with mkdir, you can make use of the getenv function as:

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);
}