_syscall(2) System Calls Manual _syscall(2) NAVN _syscall - igangsaette et systemkald uden biblioteksunderstottelse (FORAELDET) SYNOPSIS #include En _syscall-makro onsket 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 gor 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 pa systemkaldet typeN er det N. arguments type argN er navnet pa det N. argument Disse makroer opretter en funktion kaldt navn med argumenterne du angiver. Nar du inkluderer _syscall() i din kildefil sa 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, tilbod aldrig _syscall-makroer; pa disse arkitekturer var syscall(2) altid kraevet). NOTER _syscall()-makroerne laver ikke en prototype. Du skal maske oprette en, specielt for C++-brugere. Systemkald er ikke kraevet for kun at returnere positive eller negative fejlkoder. Du skal laese kilden for at vaere sikker pa hvordan det vil returnere fejl. Normalt er det det negative for en standardfejlkode, for eksempel -EPERM. _syscall()-makroerne vil returnere resultatet r for systemkaldet nar r ikke er negativt, men vil returnere -1 og angive variablen errno til -r nar r er negativ. Se errno(3) for fejlkoderne. Nar definerende et systemkald skal argumenttyperne sendes efter-vaerdi eller efter-peger (for aggregater som strukturer). EKSEMPLER #include #include #include #include /* for _syscallX-makroer/relat. ting */ #include /* 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); } Proveresultat 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 OGSA intro(2), syscall(2), errno(3) OVERSAETTELSE Oversaettere af denne manual til dansk Joe Hansen Denne oversaettelse er gratis dokumentation; laes GNU General Public License version 3 eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. Hvis du stoder pa fejl i oversaettelsen af denne vejledning, skal du sende en besked til . Linux man-pages 6.18 17. maj 2025 _syscall(2)