Question

Quand j'utilise chdir () pour modifier le répertoire de travail actuel, pourquoi ne pas le getenv ( « PWD ») donnent le répertoire de travail actuel? Ai-je besoin de setenv ( "PWD", NEWDIR, 1) aussi?

void intChangeDir(char *newDir)
{
    if( chdir(newDir)==0 )              
    {
        printf("Directory changed. The present working directory is \"%s\" \"%s\"\n",getenv("PWD"),getcwd(NULL,0));
    }
    else
    {
        printf("Error changing dir %s\n",strerror(errno));      
    }
}

sortie: (l'emplacement de l'exécutable est / home / user)

changedir / boot

Répertoire a changé. Le répertoire de travail actuel est "/ home / user" "/ boot"

Était-ce utile?

La solution

Oui, si vous voulez changer la variable d'environnement, vous devez faire explicitement que.

Il shell de mises à jour et que les ensembles PWD dans le cours normal des événements, il ne reflète que les changements du répertoire courant connu du shell.

Autres conseils

« getenv » se PWD de l'environnement que le programme a débuté. « PWD » égalant le répertoire de travail actuel est quelque chose maintenu par la coquille, et depuis que vous avez changé répertoire dans le programme que vous a commencé à partir du shell plutôt que la coquille, PWD n'a pas changé dans l'environnement.

Vous remarquerez probablement aussi que lorsque la fin de votre programme, la coquille est encore dans le répertoire que vous avez commencé à. La coque n'a pas changé de répertoire, donc PWD n'a pas changé.

La variable d'environnement PWD est pas mis à jour automatiquement par chdir, de sorte que vous auriez à le faire en utilisant explicitement setenv. Cependant, la fonction getcwd doit encore calculer automatiquement la mise à jour.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top