.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1980-1993, The Regents of the University of California. .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: BSD-4-Clause-UC .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH syscall 2 "2. februar 2026" "Linux man\-pages 6.18" .SH NAVN syscall \- indirekte systemkald .SH BIBLIOTEK C\-standardbibliotek (\fIlibc\fP,\ \fI\-lc\fP) .SH SYNOPSIS .nf \fB#include \fP /* Definition af \fBSYS_*\fP konstanter */ \fB#include \fP .P \fBlong syscall(long \fP\fInummer\fP\fB, ...);\fP .fi .P .RS -4 Feature Test Macro Requirements for glibc (se \fBfeature_test_macros\fP(7)): .RE .P \fBsyscall\fP(): .nf Siden glibc 2.19: _DEFAULT_SOURCE Før glibc 2.19: _BSD_SOURCE || _SVID_SOURCE .fi .SH BESKRIVELSE \fBsyscall\fP() er en lille biblioteksfunktion, der igangsætter systemkaldet hvis assembly\-sproggrænseflade har det angivne \fInummer\fP med de angivne argumenter. Anvendelse af \fBsyscall\fP() er nyttig, for eksempel, når et systemkald igangsættes uden en omslagsfunktion i C\-biblioteket. .P \fBsyscall\fP() gemmer cpu\-registre før der laves systemkald, gendanner registrerne ved returnering fra systemkaldet og lagrer eventuelle fejl returneret af systemkaldet i \fBerrno\fP(3). .P Symbolske konstanter for systemkaldnumre kan findes i teksthovedfilen \fI\fP. .SH RETURVÆRDI Returværdien er defineret af systemkaldet der igangsættes. Generelt indikerer en 0 returværdi succes. En returværdi på \-1 indikerer en fejl og et fejlnummer lagres i \fIerrno\fP. .SH FEJL .TP \fBENOSYS\fP Det anmodet systemkaldnummer er ikke implementeret. .P Andre fejl er specifikke for det igangsatte systemkald. .SH HISTORIK \fBsyscall\fP() kom først i 4BSD. .SH NOTER .SS "Arkitekturspecifikke krav" Hver arkitektur\-ABI har sine egne krav til hvordan systemkaldargumenter sendes til kernen. For systemkald der har et glibc\-omslag (f.eks. de fleste systemkald), så håndterer glibc detaljerne ved at kopiere argumenter til de korrekte registre på en måde egnet for arkitekturen. Når \fBsyscall\fP() bruges til at lave et systemkald, så skal kalderen måske håndtere detaljer, der afhænger af arkitekturen; dette krav ses oftest på bestemte 32\-bit arkitekturer. .P For eksempel på den ARM architecture Embedded ABI (EABI) skal en 64\-bit værdi (f.eks. \fIlong long\fP) være justeret til et lige registerpar. Brug af \fBsyscall\fP() i stedet for omslaget tilbudt af glibc, vil gøre at systemkaldet \fBreadahead\fP(2) bliver igangsat som vist efterfølgende på ARM\-arkitekturen med EABI i little endian\-tilstand: .P .in +4n .EX syscall(SYS_readahead, fd, 0, (unsigned int) (offset & 0xFFFFFFFF), (unsigned int) (offset >> 32), count); .EE .in .P Da forskydningsargumentet er 64 bit og det første argument (\fIfd\fP) sendes i \fIr0\fP, skal kalderen manuelt opdele og justere 64\-bit værdien, så den sendes i registerparret \fIr2\fP/\fIr3\fP. Det betyder indsættelse af en erstatningsværdi i \fIr1\fP (det andet argument for 0). Der skal tages speciel hensyn til at opdelingen følger endian\-konventionerne (jævnfør C ABI'en for platformen). .P .\" Mike Frysinger: this issue ends up forcing MIPS .\" O32 to take 7 arguments to syscall() Lignende problemstillinger kan opstå på MIPS med 032 ABI'en, på PowerPC og parisc med 32\-bit ABI*en og på Xtensa. .P .\" See arch/parisc/kernel/sys_parisc.c. Bemærk at mens parisc C\-ABI'en også bruger justerede registerpar, så bruges et shim\-lag til at skjule problemstillingen fra brugerummet. .P De påvirkede systemkald er \fBfadvise64_64\fP(2), \fBftruncate64\fP(2), \fBposix_fadvise\fP(2), \fBpread64\fP(2), \fBpwrite64\fP(2), \fBreadahead\fP(2), \fBsync_file_range\fP(2) og \fBtruncate64\fP(2). .P .\" You need to look up the syscalls directly in the kernel source to see if .\" they should be in this list. For example, look at fs/read_write.c and .\" the function signatures that do: .\" ..., unsigned long, pos_l, unsigned long, pos_h, ... .\" If they use off_t, then they most likely do not belong in this list. Dette påvirker ikke systemkald, der manuelt opdeler og samler 64\-bit værdier såsom \fB_llseek\fP(2), \fBpreadv\fP(2), \fBpreadv2\fP(2), \fBpwritev\fP(2) og \fBpwritev2\fP(2). Velkommen til den vidunderlige verden med historisk bagage. .SS "Arkitekturkaldende konventioner" Hver arkitektur har sin egen måde at igangsætte og sende argumenter til kernen. Detaljerne for de forskellige arkitekturer er vistn i de to tabeller nedenfor. .P Den første tabel viser instruktionen brugt til overgangen til kernetilstand (som måske ikke er den hurtigste eller bedste måde at lave overgang til kernen, så du skal måske referere til \fBvdso\fP(7)), registret brugt til at indikere systemkaldnummeret, registrene brugt til at returnere systemkaldresultatet, og registret brugt til at signalere en fejl. .if t \{\ .ft CW \} .TS l2 l2 l2 l2 l1 l2 l. Arch/ABI Instruktion System Ret Ret Fejl Noter kald # val val2 _ alpha callsys v0 v0 a4 a3 1, 6 arc trap0 r8 r0 \- \- arm/OABI swi NR \- r0 \- \- 2 arm/EABI swi 0x0 r7 r0 r1 \- arm64 svc #0 w8 x0 x1 \- blackfin excpt 0x0 P0 R0 \- \- i386 int $0x80 eax eax edx \- ia64 break 0x100000 r15 r8 r9 r10 1, 6 loongarch syscall 0 a7 a0 \- \- m68k trap #0 d0 d0 \- \- microblaze brki r14,8 r12 r3 \- \- mips syscall v0 v0 v1 a3 1, 6 nios2 trap r2 r2 \- r7 parisc ble 0x100(%sr2, %r0) r20 r28 \- \- powerpc sc r0 r3 \- r0 1 powerpc64 sc r0 r3 \- cr0.SO 1 riscv ecall a7 a0 a1 \- s390 svc 0 r1 r2 r3 \- 3 s390x svc 0 r1 r2 r3 \- 3 superh trapa #31 r3 r0 r1 \- 4, 6 sparc/32 t 0x10 g1 o0 o1 psr/csr 1, 6 sparc/64 t 0x6d g1 o0 o1 psr/csr 1, 6 tile swint1 R10 R00 \- R01 1 x86\-64 syscall eax rax rdx \- 5 x32 syscall eax rax rdx \- 5 xtensa syscall a2 a2 \- \- .TE .P Noter: .IP [1] 5 På nogle få arkitekturer bruges et register som en boolesk fejl (0 indikerer fejl og \-1 indikerer en fejl) til at signalere at systemkaldet fejlede. Den faktiske fejlværdi er stadig indeholdet i returregistret. På sparc bruges den bærende del (\fIcsr\fP) i processorstatusregistret (\fIpsr\fP) i stedet for et fuldt register. På powerpc64 bruges den summerende overflydende del (\fISO\fP) i felt 0 for betingelsesregistret (\fIcr0\fP). .IP [2] \fINR\fP er systemkaldets nummer. .IP [3] For s390 og s390x kan \fINR\fP (systemkaldnummeret) sendes direkte med \fIsvc\ NR\fP hvis det er mindre end 256. .IP [4] På SuperH er yderligere trap\-numre understøttet af historiske årsager, men \fBtrapa\fP#31 er den anbefalede »forenet« ABI. .IP [5] x32\-ABI'en deler systemkaldtabel med x86\-64\-ABI'en, men der er nogle nuancer: .RS .IP \[bu] 3 For at indikere at et systemkald kaldes under x32\-ABI'en bliver en yderligere del, \fB__X32_SYSCALL_BIT\fP, stykvis ORed med systemkaldnummeret. ABI'en brugt af en proces der påvirker nogle procesopførelser, inklusive signalhåndtering eller genstart af systemkald. .IP \[bu] Da x32 for forskellige størrelser for \fIlong\fP og pegertyper, er layout for nogle (men ikke alle; \fIstruct timeval\fP eller \fIstruct rlimit\fP er f.eks. 64\-bit) strukturer forskellige. For at kunne håndtere dette tilføjes yderligere systemkald til systemkaldtabellen, startende fra nummer 512 (uden \fB__X32_SYSCALL_BIT\fP). For eksempel er \fB__NR_readv\fP defineret som 19 for x86\-64\-ABI og som \fI__X32_SYSCALL_BIT\fP | \f[B]515\fR for x32\-ABI'en. De fleste af disse yderligere systemkald er faktisk identiske med systemkaldene brugt til at tilbyde i386 compat. Der er dog nogle bemærkelsesværdige undtagelser såsom \fBpreadv2\fP(2), der bruger \fIstruct iovec\fP\-entiteter med 4\-byte pegere og størrelser (»compat_iovec« i kernetermer), men sender et 8\-byte \fIpos\fP\-argument i et enkelt register og ikke to, som det gøres i enhver anden ABI. .RE .IP [6] Nogle arkitekturer (navnlig, Alpha, IA\-64, MIPS, SuperH, sparc/32 og sparc/64) bruger et yderligere register (»Retval2« i den ovenstående tabel) til at sende en anden returværdi fra systemkaldet \fBpipe\fP(2); Alpha bruger også denne teknik i de for arkitekturen specifikke systemkald \fBgetxpid\fP(2), \fBgetxuid\fP(2) og \fBgetxgid\fP(2). Andre arkitekturer bruger ikke det andet returværdiregistrer i systemkaldgrænsefladen, selv om den er defineret i System V ABI'en. .if t \{\ .in ^".ft P$ \} .P Den anden tabel viser registrene brugt til at sende systemkaldargumenterne. .if t \{\ .ft CW \} .TS l l2 l2 l2 l2 l2 l2 l2 l. Arch/ABI arg1 arg2 arg3 arg4 arg5 arg6 arg7 Noter _ alpha a0 a1 a2 a3 a4 a5 \- arc r0 r1 r2 r3 r4 r5 \- arm/OABI r0 r1 r2 r3 r4 r5 r7 arm/EABI r0 r1 r2 r3 r4 r5 r7 arm64 x0 x1 x2 x3 x4 x5 \- blackfin R0 R1 R2 R3 R4 R5 \- i386 ebx ecx edx esi edi ebp \- ia64 out0 out1 out2 out3 out4 out5 \- loongarch a0 a1 a2 a3 a4 a5 a6 m68k d1 d2 d3 d4 d5 a0 \- microblaze r5 r7 r7 r8 r9 r10 \- mips/o32 a0 a1 a2 a3 \- \- \- 1 mips/n32,64 a0 a1 a2 a3 a4 a5 \- nios2 r4 r5 r7 r7 r8 r9 \- parisc r26 r25 r24 r23 r22 r21 \- powerpc r3 r4 r5 r7 r7 r8 r9 powerpc64 r3 r4 r5 r7 r7 r8 \- riscv a0 a1 a2 a3 a4 a5 \- s390 r2 r3 r4 r5 r7 r7 \- s390x r2 r3 r4 r5 r7 r7 \- superh r4 r5 r7 r7 r0 r1 r2 sparc/32 o0 o1 o2 o3 o4 o5 \- sparc/64 o0 o1 o2 o3 o4 o5 \- tile R00 R01 R02 R03 R04 R05 \- x86\-64 rdi rsi rdx r10 r8 r9 \- x32 rdi rsi rdx r10 r8 r9 \- xtensa a6 a3 a4 a5 a8 a9 \- .TE .P Noter: .IP [1] 5 Mips/o32\-systemkaldkonventionen sender argumenterne 5 til 8 på brugerstakken. .if t \{\ .in ^".ft P$ \} .P Bemærk at disse tabeller ikke dækker hele den kaldende konvention\[em]nogle arkitekturer kan vilkårligt også ramme andre registre hårdt, der ikke er anført her. .SH EKSEMPLER .\" SRC BEGIN (syscall.c) .EX #define _GNU_SOURCE #include #include #include #include \& int main(void) { pid_t tid; \& tid = syscall(SYS_gettid); syscall(SYS_tgkill, getpid(), tid, SIGHUP); } .EE .\" SRC END .SH "SE OGSÅ" \fB_syscall\fP(2), \fBintro\fP(2), \fBsyscalls\fP(2), \fBerrno\fP(3), \fBvdso\fP(7) .PP .SH OVERSÆTTELSE Oversættere af denne manual til dansk Joe Hansen . .PP Denne oversættelse er gratis dokumentation; læs .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License version 3 .UE eller nyere for ophavsretbetingelser. Der er INGEN ANSVAR. .PP Hvis du støder på fejl i oversættelsen af ​​denne vejledning, skal du sende en besked til .MT debian-l10n-danish@lists.debian.org .ME .