Comment puis-je obtenir une expansion de tilde en C?

chdir("~/") ne semble pas fonctionner. Suis-je censé regarder la chaîne et substituer le tilde à la main, ou y a-t-il une meilleure solution?

POSIX fournit wordexp(3) pour effectuer une expansion de type shell, y compris une expansion de tilde.

Vous pouvez utiliser l’exemple de wordexp ci-dessous

 #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]); } 

Le tilde dans un chemin est une chose spécifique au shell. Ce que vous pouvez faire, voyez si le premier caractère est un tilde et une barre oblique (ou une fin de tilde de la chaîne), puis remplacez le tilde par la valeur de la variable d’environnement HOME (que vous pouvez obtenir de getenv ).

Si le deuxième caractère n’est pas une barre oblique, il s’agit probablement de ~user/path . Ensuite, vous devez extraire le nom d’utilisateur et utiliser, par exemple, getpwnam pour obtenir le mot de passe de l’utilisateur, qui contient le répertoire de base de cet utilisateur.