Bonjour,
Je m’explique plus précisément:
J’ai l’habitude d’utiliser FILE dans mes programmes, exemple simpliste:
main.c:
fprintf (stderr, “une erreur dans %s”, FILE);
Ce qui me donne sur l’erreur le message: une erreur dans main.c
Mais en utilisant FILE dans un programme pour l’espace noyau: le noyau, les drivers…
le même message s’affichera avec pour le nom du fichier le chemin: une erreur dans /CHEMIN…/main.c
C’est un peu encombrant dans les logs et plus la chaîne est longue plus le traitement prend de la charge CPU
par exemple dans de l’embarqué.
Il est possible de supprimer le CHEMIN en écrivant:
printk (KERN_ERR “une erreur dans %s”, strrchr(FILE, ‘/’) + 1);
il semble que basename() fonctionne aussi mais je ne l’ai pas essayé.
Je voudrais savoir si quelqu’un utilise une autre solution, un autre label type FILE, une option gcc…
Au sujet des pointeurs:
exemple simple: soit une variable devant contenir un entier (type int):
déclaration: int variable
On peut affecter une valeur à cette variable: variable = 4, variable = -85565 …
L’adresse de cette variable est &variable.
Un pointeur pointeur_variable contiendra l’adresse de cette variable:
déclaration: int *pointeur_variable
utilisation: pointeur_variable = &variable
tu peux affecter une valeur à cette variable en passant par le pointeur :
*pointeur_variable=4, *pointeur_variable = -85565 …
Si tu veux passer la valeur de la variable à une fonction la déclaration de la fonction sera par exemple:
void function (int valeur) et l’appel: function(variable) ou function(*pointeur_variable)
Si tu veux passer l’adresse de la variable à une fonction la déclaration sera par exemple:
void function (int *valeur) et l’appel: function(&variable) ou function(pointeur_variable)
Ensuite cela se complique légèrement:
Un pointeur de pointeur: int **pointeur_pointeur_variable contiendra l’adresse de l’adresse …
Et pour les structures l’accès aux membres de la structure qui se fait d’habitude par un point ‘.’ ex:
Structure.membre1 se fait avec ‘->’ ex: addStructure->membre1.
Tu peux pointer n’importe quoi, par exemple l’adresse d’un composant électronique pointeur = 0x3f… et avoir accès à son contenu par *pointeur pratique le langage C :smt001
merci.