如何在C中实现波浪扩展?
chdir("~/")
似乎不起作用。 我是否希望看到字符串并用手代替代字号,还是有更好的方法?
POSIX提供了wordexp(3)
来执行类似shell的扩展,包括波浪扩展。
您可以使用下面的wordexp
示例
#include #include int main(int argc, char* argv[]) { wordexp_t exp_result; wordexp(argv[1], &exp_result, 0); printf("%s\n", exp_result.we_wordv[0]); }
路径中的波浪号是特定于壳的东西。 你能做什么看看第一个字符是波浪号和斜线(或字符串的波浪末端),然后将波形符号替换为环境变量HOME
(可以从getenv
获得)的值。
如果第二个字符不是斜杠,则最有可能是~user/path
的forms。 然后,您必须提取用户名并使用例如getpwnam
来获取用户的密码条目,该条目包含该用户主目录。