18

chdir("~/")似乎不起作用。我是否应该查看字符串并手动替换波浪号,还是有更好的方法?

4

3 回答 3

18

POSIX 提供wordexp(3)执行类似 shell 的扩展,包括波浪号扩展。

于 2013-04-13T18:27:03.560 回答
18

您可以使用wordexp下面的示例

#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]);
}
于 2013-04-13T18:28:50.020 回答
8

路径中的波浪号是特定于 shell 的东西。您可以做什么查看第一个字符是否是波浪号和斜杠(或字符串的波浪号结尾),然后将波浪号替换为环境变量的值HOME(您可以从中获取getenv)。

如果第二个字符不是斜线,则很可能是~user/path. 然后您必须提取用户名并使用例如getpwnam获取用户的密码条目,其中包含该用户的主目录。

于 2013-04-13T18:21:56.883 回答