syscall(2)
_syscall(2) — Linux manual page
NAMN
_syscall - anropa ett systemanrop utan biblioteksstöd (FÖRÅLDRAD)
SYNOPSIS
```c
- include <linux/unistd.h>
En _syscall-makro
önskat systemanrop ```
BESKRIVNING
För att använda ett systemanrop behöver du känna till dess prototyp: antalet argument, deras typer och returtypen. Det finns sju makron som underlättar själva anropet till systemet. De har formen:
```c _syscallX(typ, namn, typ1, arg1, typ2, arg2, ...) ```
där:
- **X** är 0–6, vilket motsvarar antalet argument som systemanropet tar. - **typ** är returtypen för systemanropet. - **namn** är namnet på systemanropet. - **typN** är typen för det N:te argumentet. - **argN** är namnet på det N:te argumentet.
Dessa makron skapar en funktion med namnet du anger och de specifika argumenten. När du inkluderar _syscall() i din källkod kan du anropa systemanropet med dess namn.
FILER
/usr/include/linux/unistd.h
STANDARDER
Linux.
HISTORIK
Från och med Linux 2.6.18 togs _syscall-makrona bort från header-filer som tillhandahålls för användarutrymmet. Använd istället syscall(2). Vissa arkitekturer, särskilt ia64, tillhandahöll aldrig _syscall-makrona; på dessa arkitekturer krävdes alltid syscall(2).
ANMÄRKNINGAR
_syscall()-makrona genererar ingen prototyp. Du kan behöva skapa en, särskilt för C++-användare.
Systemanrop är inte begränsade till att returnera endast positiva eller negativa felkoder. Du behöver läsa källkoden för att vara säker på hur fel returneras. Vanligtvis är det den negativa motsvarigheten till en standardfelkod, till exempel -EPERM. _syscall()-makrona returnerar resultatet r av systemanropet när r är icke-negativt, men returnerar -1 och sätter variabeln errno till -r när r är negativt. För felkoder, se errno(3).
När du definierar ett systemanrop måste argumenttyperna överföras som värden eller som pekare (för aggregat som strukturer).
EXEMPEL
#include <stdio.h> #include <stdlib.h> #include <errno.h> #include <linux/unistd.h> /* för _syscallX-makron/relaterade saker */ #include <linux/kernel.h> /* för struct sysinfo */ _syscall1(int, sysinfo, struct sysinfo *, info); int main(void) { struct sysinfo s_info; int error; error = sysinfo(&s_info); printf("felkod = %d\n", error); printf("Uptime = %lds\nLaddning: 1 min %lu / 5 min %lu / 15 min %lu\n" "RAM: totalt %lu / ledigt %lu / delat %lu\n" "Minne i buffertar = %lu\nSwap: totalt %lu / ledigt %lu\n" "Antal processer = %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); }
Exempel på utdata:
``` felkod = 0 Uptime = 502034s Laddning: 1 min 13376 / 5 min 5504 / 15 min 1152 RAM: totalt 15343616 / ledigt 827392 / delat 8237056 Minne i buffertar = 5066752 Swap: totalt 27881472 / ledigt 24698880 Antal processer = 40 ```
SE ÄVEN
intro(2), syscall(2), errno(3)
COLOFON
Denna sida är en del av man-pages-projektet (dokumentation för Linux-kärnans och C-bibliotekets användarutrymmesgränssnitt). Information om projektet finns på ⟨https://www.kernel.org/doc/man-pages/⟩. Om du har en felrapport för denna man-sida, se ⟨https://git.kernel.org/pub/scm/docs/man-pages/man-pages.git/tree/CONTRIBUTING⟩. Denna sida hämtades från tarballen man-pages-6.9.1.tar.gz från ⟨https://mirrors.edge.kernel.org/pub/linux/docs/man-pages/⟩.