Search code examples
c++clinuxshellmkdir

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


Solution

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