Pourquoi ne pouvons-nous pas changer de répertoire via un appel système system () sous Linux?

system ("cd .."); 

Cela ne produit aucune erreur, mais ne fait rien de significatif. Pourquoi?

La fonction system() crée un fork() qui crée un processus en étant une copie du processus initial.

Le répertoire en cours dépend de l’environnement d’un processus (il est stocké dans les variables d’environnement d’un processus). Ainsi, lorsque le processus enfant , ayant son propre environnement, crée un cd , cela n’affecte que le processus enfant , pas le parent.

  • Processus parent: dans / home / x / y

  • Processus enfant (après le fork): dans / home / x / y

Faire un cd .. dans le processus enfant définit son environnement local sur / home / x
Mais le processus parent est toujours dans / home / x / y

Le processus parent attend que l’ enfant termine l’appel system , puis continue sa propre exécution avec son propre environnement ( répertoire actuel ) inchangé.

system exécute la commande que vous avez transmise dans un processus différent (dans un sous-shell). Ce sous-shell change de répertoire et se ferme rapidement.

C’est tout à fait valable, mais parfaitement inutile. Utilisez chdir pour changer votre répertoire de travail.

C’est parce qu’il exécute un autre shell. Dans ce shell, le répertoire de travail change, mais cela n’a aucun effet sur le programme appelant.