table of contents
| _syscall(2) | System Calls Manual | _syscall(2) |
NAVN¶
_syscall - igangsætte et systemkald uden biblioteksunderstøttelse (FORÆLDET)
SYNOPSIS¶
#include <linux/unistd.h>
En _syscall-makro
ønsket systemkald
BESKRIVELSE¶
Den vigtige ting at vide om et systemkald er dets prototype. Du skal vide hvor mange argumenter der er, deres typer og funktionsreturtypen. Der er syv makroer, der gør det faktiske kald til systemet nemmere. De har formen:
_syscallX(type,navn,type1,arg1,type2,arg2,...)
hvor
- X er 0–6, der er antallet af argumenter fra systemkaldet
- type er returtypen for systemkaldet
- navn er navnet på systemkaldet
- typeN er det N. arguments type
- argN er navnet på det N. argument
Disse makroer opretter en funktion kaldt navn med argumenterne du angiver. Når du inkluderer _syscall() i din kildefil så kalder du systemkaldet med navn.
FILER¶
/usr/include/linux/unistd.h
STANDARDER¶
Linux.
HISTORIK¶
Startende omkring Linux 2.6.18 blev _syscall-makroerne fjernet fra teksthovedfilerne leveret til brugerrummet. Brug syscall(2) i stedet for. (Nogle arkitekturer, specielt ia64, tilbød aldrig _syscall-makroer; på disse arkitekturer var syscall(2) altid krævet).
NOTER¶
_syscall()-makroerne laver ikke en prototype. Du skal måske oprette en, specielt for C++-brugere.
Systemkald er ikke krævet for kun at returnere positive eller negative fejlkoder. Du skal læse kilden for at være sikker på hvordan det vil returnere fejl. Normalt er det det negative for en standardfejlkode, for eksempel -EPERM. _syscall()-makroerne vil returnere resultatet r for systemkaldet når r ikke er negativt, men vil returnere -1 og angive variablen errno til -r når r er negativ. Se errno(3) for fejlkoderne.
Når definerende et systemkald skal argumenttyperne sendes efter-værdi eller efter-peger (for aggregater som strukturer).
EKSEMPLER¶
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <linux/unistd.h> /* for _syscallX-makroer/relat. ting */
#include <linux/kernel.h> /* for struct sysinfo */
_syscall1(int, sysinfo, struct sysinfo *, info);
int
main(void)
{
struct sysinfo s_info;
int error;
error = sysinfo(&s_info);
printf("Kodefejl = %d\n", fejl);
printf("Oppetid = %lds\nBelastning: 1 min %lu / 5 min %lu / 15 min %lu\n"
"RAM: samlet %lu / fri %lu / delt %lu\n"
"Hukommelse i buffere = %lu\nSwap: samlet %lu / fri %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);
}
Prøveresultat¶
Kodefejl = 0 Oppetid = 502034s Belastning: 1 min 13376 / 5 min 5504 / 15 min 1152 RAM: samlet 15343616 / fri 827392 / delt 8237056 Hukommelse i buffere = 5066752 Swap: samlet 27881472 / fri 24698880 Antal processer = 40
SE OGSŶ
OVERSÆTTELSE¶
Oversættere af denne manual til dansk Joe Hansen <joedalton2@yahoo.dk>
Denne oversættelse er gratis dokumentation; læs GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR.
Hvis du støder på fejl i oversættelsen af denne vejledning, skal du sende en besked til debian-l10n-danish@lists.debian.org.
| 17. maj 2025 | Linux man-pages (ej udgivet) |