Les appels système vs C/C++ appels système
Je suis en train d'écrire un programme C et l'une des contraintes est que je ne peut pas invoquer des programmes externes à l'aide de system
. Au lieu de cela, j'ai besoin de travailler dans l'idiome de la langue à l'aide du système des appels à partir de l'intérieur de la C/C++ de la bibliothèque. Je vais avoir quelques problèmes pour comprendre la différence entre "système" des appels et des "C/C++" système d'appels.
Est system
simplement dépendants de la plateforme tout en "C" du système des appels construit ontop de system
et change automatiquement d'exécution en fonction de la plateforme utilisée?
Espère que ma question est claire. Merci à l'avance!
- Pourriez-vous donner un exemple d'un programme externe que vous souhaitez appeler?
- Voulez-vous dire
fread
etfopen
ou plutôtopen
etread
? - Oui,
system
juste de lancer un shell de commande pour lancer un binaire (ou shell builtin) que vous demandez. Un système d'appel est un appel à une "fonctionnalité" du noyau, la fonction de ce noyau est le seul à pouvoir effectuer (c'est à dire "vraiment", l'accès au matériel). Bien sûr, un programme engendré parsystem
pouvez utiliser les appels système. Je suppose que le but est de vous forcer à tout faire, en ne s'appuyant pas sur un binaire qui va le faire pour vous. open
était celle que j'avais en tête mais il s'agissait plus d'une question d'ordre général.- De manière plausible, mais pas exactement la même question: stackoverflow.com/questions/28137628/alternative-to-system/...
Vous devez vous connecter pour publier un commentaire.
Les systèmes d'exploitation Linux exposer les fonctionnalités de deux façons:
Par exemple, pour créer un répertoire:
L'aide de l'environnement, la
mkdir
commande est utilisée, voir http://linux.die.net/man/1/mkdir.Le
system
C fonction appelle une coquille d'appeler une telle commande:Le correspondant de l'appel système est aussi appelé
mkdir
, maintenant voir http://linux.die.net/man/2/mkdir à la place.Il est utilisé directement dans C comme ceci:
L'avantage de l'utilisation de ce dernier appel, c'est qu'il est plus facile de vérifier les conditions d'erreur, et qu'aucune bifurcation a lieu de déléguer les travaux à un sous-processus, ce qui rend cette solution plus rapide et plus léger dans l'utilisation de la mémoire, entre autres choses.
Le terme "appel système" est pour les systèmes d'exploitation fonctions natives, comme
pipe
oufork
ouwrite
(sur POSIX plates-formes comme Linux), il n'a rien à voir avec la fonctionsystem
. Ensuite, vous avez de la bibliothèque standard qui est spécifié dans le C (ou C++) les spécifications, et généralement s'appuie sur les systèmes d'exploitation natif "appels système".Lire par exemple cet Wikipedia "appel système" de l'article, ou ce sujet de bibliothèques standard pour plus d'informations.
Aussi, aucun appel de système d'exploitation, ou C (ou C++) de la bibliothèque standard de la fonction actuall appelle la
system
fonction, en fait, lesystem
fonction est implémentée à l'aide de niveau inférieur appels système (commefork
etwait
sur Linux). Lesystem
la fonction fait partie de la bibliothèque standard de C et de C++.La système fonction elle-même, fondamentalement, engendre un processus de shell et lance le programme si l'utilisateur a tapé juste à partir de la ligne de commande lui-même.
"Appels système" dans l'autre sens sont ce que les bibliothèques ne invoquer le système d'exploitation pour faire quelque chose d'un code de programme ne pouvais pas le faire sur son propre. Par exemple: l'ouverture d'un fichier, à partir d'un autre processus, et tout type d'opérations d'e/S. Sous Linux, la plupart de ces appels système sont exposées en tant que fonction C Api que votre programme peut invoquer ces opérations (par exemple, ouvrir, lire, etc...). Tout le système Linux appels sont listés sur la page de manuel ici: http://man7.org/linux/man-pages/man2/syscalls.2.html