avant-propos
C'est aussi une fonction de la bibliothèque glibc très couramment utilisée
Qu'il s'agisse du code métier de l'utilisateur ou du code de nombreuses bibliothèques de classes, il sera essentiellement utilisé pour obtenir le chemin actuel
Mais ici, nous regardons la mise en œuvre spécifique
cas de test
Utilisez simplement getcwd
root@ubuntu:~/Desktop/linux/HelloWorld# cat Test04Getcwd.c
#include "stdio.h"
int main(int argc, char** argv) {
int x = 2;
int y = 3;
int z = x + y;
char* p1 = (char*) malloc(40);
printf("p1 : 0x%x\n", p1);
getcwd(p1, 100);
int p1Len = strlen(p1);
printf(" p1 = %s, p1Len = %d\n ", p1, p1Len);
}
Implémentation de getcwd
Confirmez d'abord la position du point d'arrêt, l'appel de fonction de getcwd dans main
L'implémentation de getcwd est la suivante
Le traitement par défaut est directement basé sur l'appel système getcwd
Si le nom est trop long, obtenez le chemin actuel basé sur generic_getcwd
generic_getcwd est basé sur le système de fichiers proc et obtient le cwd stocké dans le processus en cours sous le système de fichiers proc
root@ubuntu:~/Desktop/linux/HelloWorld# ll /proc/5753/cwd
lrwxrwxrwx 1 root root 0 Nov 25 23:39 /proc/5753/cwd -> /root/Desktop/linux/HelloWorld/
appel système getcwd
L'appel système getcwd est le suivant, où le chemin actuel est "/jerry/dir"
Le disque dur "/dev/sda1" est monté sur "/jerry"
Le traitement ici est que le dentry du chemin actuel commence à traverser vers le haut jusqu'à ce qu'il atteigne le nœud racine
Ensuite, sortez cette série de chemins vers le tampon
sur