How do I achieve tilde expansion in C?

前端 未结 3 1863
感动是毒
感动是毒 2021-01-04 01:48

chdir(\"~/\") doesn\'t seem to work. Am I expected to look at the string and substitute tilde by hand, or is there some better way?

相关标签:
3条回答
  • 2021-01-04 02:05

    POSIX provides wordexp(3) to perform shell-like expansion, including tilde expansion.

    0 讨论(0)
  • 2021-01-04 02:06

    You can you use wordexp example below

    #include <stdio.h>
    #include <wordexp.h>
    
    int main(int argc, char* argv[]) {
        wordexp_t exp_result;
        wordexp(argv[1], &exp_result, 0);
        printf("%s\n", exp_result.we_wordv[0]);
    }
    
    0 讨论(0)
  • 2021-01-04 02:19

    The tilde in a path is a shell specific thing. What you can do see if the first character is a tilde and a slash (or a tilde end end of the string), then replace the tilde with the value of the environment variable HOME (which you can get from getenv).

    If the second character is not a slash, it's most likely in the form of ~user/path. Then you have to extract the user-name and use e.g. getpwnam to get the password entry of the user, which contains that users home directory.

    0 讨论(0)
提交回复
热议问题