_syscall(2) System Calls Manual _syscall(2) NOM _syscall - Invoquer un appel systeme sans prise en charge par la bibliotheque (OBSOLETE) SYNOPSIS #include Une macro _syscall L'appel systeme desire DESCRIPTION La chose importante a savoir sur un appel systeme est son prototype. Vous devez savoir combien d'arguments il prend, leurs types et le type retour de la fonction. Il y a sept macros qui facilitent les appels du systeme. Elles ont la forme : _syscallX(type,nom,type1,arg1,type2,arg2,...) ou X est 0-6, qui est le nombre d'argument pris par l'appel systeme type est le type de retour de l'appel systeme name est le nom de l'appel systeme typeN est le type du Nieme parametre argN est le nom du Nieme parametre Ces macros creent une fonction appelee name avec les arguments indiques. Une fois que vous avez inclus votre _syscall() dans votre fichier source, vous pouvez appeler l'appel systeme par name. FICHIERS /usr/include/linux/unistd.h STANDARDS Linux. HISTORIQUE A partir de Linux 2.6.18 environ, les macros _syscall ont ete supprimees des fichiers d'en-tetes fournis a l'espace utilisateur. Utilisez syscall(2) a la place. (Certaines architectures, particulierement ia64, n'ont jamais fourni les macros _syscall ; sur ces architectures, syscall(2) etait toujours necessaire.) NOTES Les macros _syscall() ne fournissent pas de prototype. Vous devez en creer un, particulierement les utilisateurs de C++. Il n'est pas obligatoire que les appels systeme retournent un code d'erreur seulement positif ou negatif. Vous devez lire les sources pour savoir comment les erreurs sont retournees. Generalement, il s'agit de la valeur opposee d'un code d'erreur standard, par exemple, -EPERM. Les macros _syscall() retourneront le resultat r de l'appel systeme lorsque r n'est pas negatif, mais retournera -1 et ecrira la variable errno avec -r lorsque r est negatif. Pour ces codes d'erreurs, consultez errno(3). Lors de la definition d'un appel systeme, les types d'arguments doivent etre passes par valeur ou par pointeur (pour les types aggreges comme les structures). EXEMPLES #include #include #include #include /* pour les _syscallX et autres */ #include /* pour struct sysinfo */ _syscall1(int, sysinfo, struct sysinfo *, info); int main(void) { struct sysinfo s_info; int error; error = sysinfo(&s_info); printf("code error = %d\n", error); printf("Uptime = %lds\nLoad: 1 min %lu / 5 min %lu / 15 min %lu\n" "RAM: total %lu / free %lu / shared %lu\n" "Memory in buffers = %lu\nSwap: total %lu / free %lu\n" "Number of processes = %d\n", s_info.uptime, s_info.loads[0], s_info.loads[1], s_info.loads[2], s_info.totalram, s_info.freeram, s_info.sharedram, s_info.bufferram, s_info.totalswap, s_info.freeswap, s_info.procs); exit(EXIT_SUCCESS); } Echantillon de sortie code error = 0 uptime = 502034s Load: 1 min 13376 / 5 min 5504 / 15 min 1152 RAM: total 15343616 / free 827392 / shared 8237056 Memory in buffers = 5066752 Swap: total 27881472 / free 24698880 Number of processes = 40 VOIR AUSSI intro(2), syscall(2), errno(3) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Philippe MENGUAL Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 _syscall(2)