Niveau conceptuel
Lorsque vous démarrez un processus à partir de votre shell, le répertoire de travail actuel du processus est le même que le répertoire de travail actuel de votre shell. Dans le contexte du shell, le répertoire de travail actuel est l'emplacement où vous êtes actuellement "à".
Le répertoire de travail actuel de tout processus est utilisé pour interpréter les chemins relatifs. Par exemple, si le répertoire de travail était en cours de votre shell /home/reneet vous couru ls ..de la coquille, répertoire de travail courant du processus, /home/reneserait utilisé pour résoudre ..à /home.
Vous pouvez voir les répertoires de travail actuels de tous les processus en cours d'exécution sur votre système avec lsof | grep '\scwd\s'(notez que vous devrez probablement être root pour voir les processus des autres utilisateurs.) Cela peut vous donner une idée de la façon dont les répertoires de travail actuels sont liés à la processus en cours d'exécution sur votre système.
Niveau du programme
Le répertoire de travail actuel du shell est le répertoire que vous voyez et modifiez avec les commandes internes du shell pwdet cdrespectivement. Ces commandes appellent des appels système tels que getcwdet chdirqui fonctionnent avec le répertoire de travail actuel de votre shell.
En utilisant bashcomme exemple, le cdintégré exécute finalement cette ligne:
if (chdir (nolinks ? newdir : tdir) == 0)
et le pwdintégré exécute finalement cette ligne:
the_current_working_directory = getcwd (0, PATH_MAX);
Le shell n'est qu'un exemple pratique de l'utilisation du répertoire de travail actuel; ces mêmes appels système sont également utilisés par d'autres programmes. Un programme peut changer son répertoire de travail actuel en /usret tous les chemins relatifs que le programme utilise commenceront à partir du /usrrépertoire,
Niveau noyau
Le répertoire de travail actuel d'un processus est stocké par le noyau. Linux le stocke dans le pwdmembre d'un fs_structpointé par le fsmembre d'un task_struct. Le pwdmembre est une pathstructure qui pointe vers des informations sur mount ( vfsmount) et l'emplacement du répertoire dans le système de fichiers ( dentry). Chaque processus a un task_structassocié.
Les appels système chdiret getcwdmodifient et récupèrent les informations dans pwd.