18

chdir("~/")動作しないようです。文字列を見てチルダを手で置き換える必要がありますか、それとももっと良い方法がありますか?

4

3 に答える 3

18

POSIX ではwordexp(3)、チルダ展開を含む、シェルのような展開を実行できます。

于 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

パスのチルダはシェル固有のものです。最初の文字がチルダとスラッシュ (または文字列のチルダの末尾) であるかどうかを確認し、チルダを環境変数の値HOME(から取得できます) に置き換えますgetenv

2 番目の文字がスラッシュでない場合は、おそらく~user/path. 次に、ユーザー名を抽出し、たとえばgetpwnam、そのユーザーのホームディレクトリを含むユーザーのパスワードエントリを取得するために使用する必要があります。

于 2013-04-13T18:21:56.883 に答える