J'aimerais savoir quelle est la différence entre un appel de bibliothèque et un appel système sous Linux. Tous les pointeurs pour une bonne compréhension des concepts des deux seront grandement appréciés.
Il n'y a pas vraiment une chose comme un "appel de bibliothèque". Vous pouvez appeler une fonction liée à une bibliothèque partagée. Et cela signifie simplement que le chemin de la bibliothèque est recherché sur l'exécution pour déterminer l'emplacement de la fonction à appeler.
Les appels système sont des appels de noyau de niveau bas gérés par le noyau.
Si vous tapez man man
Dans votre shell, vous verrez la liste des sections manuelles
2 appels système (fonctions fournies par le noyau)
3 appels de bibliothèque (fonctions dans les bibliothèques de programme)
Par exemple, vous trouverez chmod
dans la section 2 du manuel lors de la frappe man chmod
. Et fprintf
dans la section 3.
Les appels système sont traités directement par le noyau.
Les appels de bibliothèque sont gérés par une bibliothèque dynamique (ou statiquement liée). Le programme effectuant l'appel de la bibliothèque doit d'abord importer cette bibliothèque, avant que l'appel ne fonctionne. Les appels de bibliothèque peuvent utiliser des appels système.
Parfois, les bibliothèques sont fournies sous forme de "fronts" aux appels système, pour fournir une fonctionnalité supplémentaire ou une facilité d'utilisation non fournie par le noyau.
Appels système sont des fonctions que le système d'exploitation prévoit des applications à utiliser. Alors que les fonctions comme celles de Math.H, String.h, etc. sont celles qui n'ont rien à voir avec l'interface avec le système d'exploitation.
Il suffit d'ajouter aux différences mentionnées ici dans d'autres réponses.
Étant donné qu'un appel de bibliothèque est simplement un appel de fonction, aucun interrupteur d'espace utilisateur à l'espace du noyau se produit. D'autre part, un appel système entraîne un passage d'un espace utilisateur à l'espace du noyau car l'appel système fonctionne en mode noyau.