Kategori:Linuxmanual grupp 2
Version från den 31 augusti 2025 kl. 15.27 av Admin (diskussion | bidrag) (Skapade sidan med '== Systemanrop i Unix/Linux == Ett '''systemanrop''' är den mekanism som användarprogram använder för att be kärnan utföra en tjänst. Eftersom användarprocesser körs i ''user space'' och kärnan i ''kernel space'', krävs ett kontrollerat gränssnitt för att komma åt hårdvara och resurser. Systemanropen utgör detta gränssnitt. Exempel: * När du öppnar en fil med ''open()'' * När du ändrar filrättigheter med ''chmod()'' * När du ändrar processens st...')
Systemanrop i Unix/Linux
Ett systemanrop är den mekanism som användarprogram använder för att be kärnan utföra en tjänst. Eftersom användarprocesser körs i user space och kärnan i kernel space, krävs ett kontrollerat gränssnitt för att komma åt hårdvara och resurser. Systemanropen utgör detta gränssnitt.
Exempel:
- När du öppnar en fil med open()
- När du ändrar filrättigheter med chmod()
- När du ändrar processens standardmask med umask()
sker det via systemanrop.
Viktiga kategorier av systemanrop
- Fil- och kataloghantering
- open(), close(), read(), write(), lseek()
- stat(), fstat(), chmod(), chown(), umask()
- mkdir(), rmdir(), link(), unlink(), rename()
- Processhantering
- fork() – skapa ny process
- exec() – starta ett nytt program
- wait() – vänta på barnprocess
- exit() – avsluta process
- getpid(), getppid(), kill()
- Minneshantering
- brk(), sbrk() – hantera heap
- mmap(), munmap() – minnesmappning
- mprotect() – skyddsattribut
- Signalhantering
- signal(), sigaction()
- kill() – skicka signal till process
- pause(), alarm()
- Tids- och klockanrop
- time(), gettimeofday()
- nanosleep(), clock_gettime()
- Kommunikation mellan processer (IPC)
- Rör (pipes): pipe(), dup()
- Delat minne: shmget(), shmat(), shmdt()
- Meddelandeköer: msgget(), msgsnd(), msgrcv()
- Semaforer: semget(), semop(), semctl()
- Sockets: socket(), bind(), connect(), accept(), send(), recv()
- Användar- och grupp-ID
- getuid(), geteuid(), setuid()
- getgid(), setgid()
- Övriga systemanrop
- umask() – ställ in filskapandemask
- uname() – systeminformation
- ioctl() – styra enheter
- mount(), umount() – hantera filsystem
Exempel: umask(2)
Systemanropet umask() sätter processens filrättighetsmask, vilket avgör vilka rättigheter som inte ges när nya filer eller kataloger skapas.
#include <sys/types.h>
#include <sys/stat.h>
int main() {
umask(022); // nya filer får inte skriv-rättighet för grupp/andra
return 0;
}
Sammanfattning
Systemanrop är kärnans API mot användarprogram. De utgör den grundläggande mekanismen för filhantering, processkontroll, minnesanvändning, signaler, tid, kommunikation mellan processer och mycket mer.
Komplett tabell över Linux-systemanrop (x86_64)
| Nr | Namn | Beskrivning |
|---|---|---|
| 0 | read | Läser från filbeskrivare |
| 1 | write | Skriver till filbeskrivare |
| 2 | open | Öppnar fil eller enhet |
| 3 | close | Stänger filbeskrivare |
| 4 | stat | Filstatus |
| 5 | fstat | Filstatus via beskrivare |
| 6 | lstat | Filstatus för symlänk |
| 7 | poll | Väntar på händelse |
| 8 | lseek | Ändrar offset i fil |
| 9 | mmap | Minneskartläggning |
| 10 | mprotect | Skyddar minnesområde |
| 11 | munmap | Avkartläggning av minne |
| 12 | brk | Ändrar heap-storlek |
| 13 | rt_sigaction | Hanterar signalaktion |
| 14 | rt_sigprocmask | Blockerar signaler |
| 15 | rt_sigreturn | Återställ signaler |
| 16 | ioctl | Enhetsstyrning |
| 17 | pread64 | Läs vid specifikt offset |
| 18 | pwrite64 | Skriv vid specifikt offset |
| 19 | readv | Läs till flera buffertar |
| 20 | writev | Skriv från flera buffertar |
| 21 | access | Kontroll av filrättigheter |
| 22 | pipe | Skapar en pipe |
| 23 | select | Synkron I/O-multiplex |
| 24 | sched_yield | Ger schemaläggning |
| 25 | mremap | Flyttar virtuellt minnesområde |
| 26 | msync | Synkroniserar memory-mapped fil |
| 27 | mincore | Kontrollerar sidans närvaro i minne |
| 28 | madvise | Råd om åtkomstmönster |
| 29 | shmget | Initierar delat minne |
| 30 | shmat | Monterar delat minne |
| 31 | shmctl | Hanterar delat minne |
| 32 | dup | Kopierar filbeskrivare |
| 33 | dup2 | Kopierar till specifik beskrivare |
| 34 | pause | Väntar signal |
| 35 | nanosleep | Väntar med högupplöst timer |
| 36 | getitimer | Läser timer |
| 37 | alarm | Sätter alarm-signal |
| 38 | setitimer | Sätter timer |
| 39 | getpid | Hämtar process-ID |
| 40 | sendfile | Kopierar data mellan deskriptorer |
| 41 | socket | Skapar socket |
| 42 | connect | Ansluter socket |
| 43 | accept | Accepterar anslutning |
| 44 | sendto | Skickar data till socket |
| 45 | recvfrom | Tar emot data från socket |
| 46 | sendmsg | Skickar med kontrollinfo via socket |
| 47 | recvmsg | Tar emot med kontrollinfo via socket |
| 48 | shutdown | Avslutar socket-anslutning |
| 49 | bind | Binder socket till adress |
| 50 | listen | Lyssnar på socket |
| 51 | getsockname | Hämtar sockeradress |
| 52 | getpeername | Hämtar peers adress |
| 53 | socketpair | Skapar par av sockets |
| 54 | setsockopt | Sätter socket-option |
| 55 | getsockopt | Hämtar socket-option |
| 56 | clone | Skapar ny process/ett nytt tråd |
| 57 | fork | Skapar barnprocess |
| 58 | vfork | Snabbare barnprocess |
| 59 | execve | Startar nytt program |
| 60 | exit | Terminera process |
| 61 | wait4 | Väntar på barnprocess och resurser |
| 62 | kill | Skickar signal till process |
| 63 | uname | Systeminformation |
| 64 | semget | Initierar semafor |
| 65 | semop | Semaforoperation |
| 66 | semctl | Hanterar semafor |
| 67 | shmdt | Kopplar bort delat minne |
| 68 | msgget | Initierar meddelandekö |
| 69 | msgsnd | Skickar meddelande i kö |
| 70 | msgrcv | Tar emot meddelande från kö |
| 71 | msgctl | Hanterar meddelandekö |
| 72 | fcntl | Filbeskrivarhantering |
| 73 | flock | Rådande fil-lås |
| 74 | fsync | Synkroniserar fil till disk |
| 75 | fdatasync | Partiskt fsync |
| 76 | truncate | Förkortar fil |
| 77 | ftruncate | Förkortar fil via deskriptor |
| 78 | getdents | Läser kataloginnehåll |
| 79 | getcwd | Hämta nuvarande katalog |
| 80 | chdir | Ändrar aktuell katalog |
| 81 | fchdir | Ändrar katalog via deskriptor |
| 82 | rename | Byter namn på fil |
| 83 | mkdir | Skapar katalog |
| 84 | rmdir | Tar bort katalog |
| 85 | creat | Skapar/öppnar fil till skrivning |
| 86 | link | Skapar hård länk |
| 87 | unlink | Tar bort länk |
| 88 | symlink | Skapar symbolisk länk |
| 89 | readlink | Läser symbolisk länk |
| 90 | chmod | Ändrar filrättigheter |
| 91 | fchmod | Ändrar rättigheter via deskriptor |
| 92 | chown | Ändrar ägare |
| 93 | fchown | Ändrar ägare via deskriptor |
| 94 | lchown | Ändrar ägare utan att följa symlink |
| 95 | umask | Sätter filskapandemask |
| 96 | gettimeofday | Hämtar tidzon och tid |
| 97 | getrlimit | Hämtar resursgränser |
| 98 | getrusage | Hämtar resurserapport |
| 99 | sysinfo | Systemstatistik |
| 100 | times | Processkörtidsinfo |
| 101 | ptrace | Spårar annan process |
| 102 | getuid | Hämtar användar-ID |
| 103 | syslog | Kernel-loggstyrning |
| 104 | getgid | Hämtar grupp-ID |
| 105 | setuid | Sätter användar-ID |
| 106 | setgid | Sätter grupp-ID |
| 107 | geteuid | Hämtar effektivt användar-ID |
| 108 | getegid | Hämtar effektivt grupp-ID |
| 109 | setpgid | Sätter processgruppen-ID |
| 110 | getppid | Hämtar föräldraprocess-ID |
| 111 | getpgrp | Hämtar processgrupps-ID |
| 112 | setsid | Initierar ny session |
| 113 | setreuid | Sätter verkligt och effektivt UID |
| 114 | setregid | Sätter verkligt och effektivt GID |
| 115 | getgroups | Hämtar extra grupper |
| 116 | setgroups | Sätter extra grupper |
| 117 | setresuid | Sätter UID-set, effektiv och verklig |
| 118 | getresuid | Hämtar UID-set, effektiv och verklig |
| 119 | setresgid | Sätter GID-set, effektiv och verklig |
| 120 | getresgid | Hämtar GID-set, effektiv och verklig |
| 121 | getpgid | Hämtar processgrupp för process |
| 122 | setfsuid | Sätter UID för filsystemåtkomst |
| 123 | setfsgid | Sätter GID för filsystemåtkomst |
| 124 | getsid | Hämtar session-ID |
| 125 | capget | Hämtar capabilities |
| 126 | capset | Sätter capabilities |
| 127 | rt_sigpending | Utestående signaler |
| 128 | rt_sigtimedwait | Väntar signal med timeout |
| 129 | rt_sigqueueinfo | Skickar signal med data |
| 130 | rt_sigsuspend | Byter signalmask och väntar |
| 131 | sigaltstack | Hanterar signalstack |
| 132 | utime | Ändrar tidsstämplar |
| 133 | mknod | Skapar filsystemobjekt |
| 134 | uselib | Laddar dynamiskt bibliotek |
| 135 | personality | Ändrar exekveringsdomän |
| 136 | ustat | Filsysteminfo |
| 137 | statfs | Filsystemstatistik |
| 138 | fstatfs | Filsystemstatistik via deskriptor |
| 139 | sysfs | Kända filsystem |
| 140 | getpriority | Hämtar processprioritet |
| 141 | setpriority | Sätter processprioritet |
| 142 | sched_setparam | Ändrar schemaläggningsparametrar |
| 143 | sched_getparam | Hämtar schemaläggningsparametrar |
| 144 | sched_setscheduler | Ändrar schemaläggningspolicy |
| 145 | sched_getscheduler | Hämtar schemaläggningspolicy |
| 146 | sched_get_priority_max | Max prioritet under policy |
| 147 | sched_get_priority_min | Min prioritet under policy |
| 148 | sched_rr_get_interval | Round-Robin-interval |
| 149 | mlock | Låser minne i RAM |
| 150 | munlock | Frigör låst minne |
| 151 | mlockall | Låser all process-minne |
| 152 | munlockall | Frigör allt låst minne |
| 153 | vhangup | Simulerar hängup |
| 154 | modify_ldt | Lokal beskrivartabell |
| 155 | pivot_root | Ändrar rot-filsystem |
| 156 | _sysctl | Hämtar/sätter kernelparametrar |
| 157 | prctl | Processkontroll |
| 158 | arch_prctl | Arkitektur-specifika processparametrar |
| 159 | adjtimex | Styr klockinställningar |
| 160 | setrlimit | Sätter resursgränser |
| 161 | chroot | Ändrar rotkatalog |
| 162 | sync | Skriver buffrat till disk |
| 185 | security | Oimplementerat memset-syscall |
| 186 | gettid | Hämtar thread-ID |
| 187 | readahead | Förladdar fil |
| 188 | setxattr | Sätter utökad filattribut |
| 189 | lsetxattr | Filattribut på symlink |
| 190 | fsetxattr | Filattribut via deskriptor |
| 191 | getxattr | Läser utökad filattribut |
| 192 | lgetxattr | Symlink-utökad attribut |
| 193 | fgetxattr | Deskriptor-utökad attribut |
| 194 | listxattr | Lista utökad attribut |
| 195 | llistxattr | Symlink-lista attribut |
| 196 | flistxattr | Deskriptor-lista attribut |
| 197 | removexattr | Tar bort utökad attribut |
| 198 | lremovexattr | Symlink-ta bort attribut |
| 199 | fremovexattr | Deskriptor-ta bort attribut |
| 200 | tkill | Skickar signal till tråd |
| 201 | time | Hämtar tid |
| 202 | futex | Futex-låsningsmekanism |
| 203 | sched_setaffinity | Sätt CPU-affinitet |
| 204 | sched_getaffinity | Hämta CPU-affinitet |
| 205 | set_thread_area | Skapar TLS-område |
| 206 | io_setup | Initierar asynkron I/O |
| 207 | io_destroy | Avslutar asynkron I/O |
| 208 | io_getevents | Läser I/O-händelser |
| 209 | io_submit | Skicka I/O-block |
| 210 | io_cancel | Avbryta I/O-operation |
| 211 | get_thread_area | Hämtar TLS-område |
| 212 | lookup_dcookie | -- |
| 213 | epoll_create | Skapar epoll-filbeskrivare |
| 214 | epoll_ctl_old | -- |
| 215 | epoll_wait_old | -- |
| 216 | remap_file_pages | -- |
| 217 | getdents64 | Kataloginnehåll i 64-bitars format |
| 218 | set_tid_address | -- |
| 219 | restart_syscall | -- |
| 220 | semtimedop | -- |
| 221 | fadvise64 | -- |
| 222 | timer_create | -- |
| 223 | timer_settime | -- |
| 224 | timer_gettime | -- |
| 225 | timer_getoverrun | -- |
| 226 | timer_delete | -- |
| 227 | clock_settime | -- |
| 228 | clock_gettime | -- |
| 229 | clock_getres | -- |
| 230 | clock_nanosleep | -- |
| 231 | exit_group | -- |
| 232 | epoll_wait | -- |
| 233 | epoll_ctl | -- |
| 234 | tgkill | Skickar signal till tråd i grupp |
| 235 | utimes | Sätter tidstämpel |
| 236 | vserver | Oimplementerat |
| 237 | mbind | NUMA-policy för minne |
| 238 | set_mempolicy | NUMA-policy för tråd |
| 239 | get_mempolicy | Hämtar NUMA-policy |
| 240 | mq_open | Öppnar message queue |
| 241 | mq_unlink | Tar bort message queue |
| 242 | mq_timedsend | Skickar meddelande med timeout |
| 243 | mq_timedreceive | Tar emot meddelande med timeout |
| 244 | mq_notify | Notifiering för message queue |
| 245 | mq_getsetattr | Hämtar/ändrar message queue-attribut |
| 246 | kexec_load | Förbereder nytt kärna för laddning |
| 247 | waitid | Väntar på barnprocess |
| 248 | add_key | Lägg till nyckel i kernel-hantering |
| 249 | request_key | Hämtar nyckel från hantering |
| 250 | keyctl | Nyckelhantering |
| 251 | ioprio_set | Sätter I/O-prioritet |
| 252 | ioprio_get | Hämtar I/O-prioritet |
| 253 | inotify_init | Initierar inotify |
| 254 | inotify_add_watch | Lägger till övervakning |
| 255 | inotify_rm_watch | Tar bort övervakning |
| 256 | migrate_pages | Flyttar minnessidor |
| 257 | openat | Öppna relativt en katalog |
| 258 | mkdirat | Skapa katalog relativt |
| 259 | mknodat | Skapa specialfil relativt |
| 260 | fchownat | Ägare-ändring relativt |
| 261 | futimesat | Ändra tidstämpel relativt |
| 262 | newfstatat | Filstatus relativt |
| 263 | unlinkat | Ta bort relativt |
| 264 | renameat | Byt namn relativt |
| 265 | linkat | Skapa länk relativt |
| 266 | symlinkat | Skapa symlink relativt |
| 267 | readlinkat | Läs symlink relativt |
| 268 | fchmodat | Ändra rättigheter relativt |
| 269 | faccessat | Kontrollera åtkomst relativt |
| 270 | pselect | Variant av select |
| 271 | ppoll | Variant av poll |
| 272 | unshare | Separera delade kontexter |
| 273 | set_robust_list | Lägg till robust futex |
| 274 | get_robust_list | Hämta robust futex-lista |
| 275 | splice | Flytta data pipe↔file utan userspace |
| 276 | tee | Duplikera pipe utan data-flytt |
| 277 | sync_file_range | Synkroniseringsintervall fil |
| 278 | vmsplice | Flytta sida till pipe |
| 279 | move_pages | Flytta minnesidor (NUMA) |
| 280 | utimensat | Uppdatera tidstämpel med hög precision |
| 281 | epoll_pwait | Variant av epoll_wait |
| 282 | signalfd | Skapa fd för signaler |
| 283 | timerfd_create | Skapa timer via fd |
| 284 | eventfd | Skapa eventfd |
| 285 | fallocate | Allokera filutrymme via fd |
| 286 | timerfd_settime | Sätt timerfd-tid |
| 287 | timerfd_gettime | Läs timerfd-tid |
| 288 | accept4 | accept med flags |
| 289 | signalfd4 | -- |
| 290 | eventfd2 | -- |
| 291 | epoll_create1 | -- |
| 292 | dup3 | Variant av dup |
| 293 | pipe2 | Pipe med flags |
| 294 | inotify_init1 | -- |
| 295 | preadv | Läsv med offset multipel buffert |
| 296 | pwritev | Skriv med offset multipel buffert |
| 297 | rt_tgsigqueueinfo | -- |
| 298 | perf_event_open | Öppna prestanda-event |
| 299 | recvmmsg | Mottag multipla meddelanden |
| 300 | fanotify_init | Initiera fanotify-grupp |
| 301 | fanotify_mark | Markera filer/folders för notifiering |
| 302 | prlimit64 | Resursgränser per process |
| 303 | name_to_handle_at | Öppna via handle |
| 304 | open_by_handle_at | -- |
| 305 | clock_adjtime | Justera tid |
| 306 | syncfs | Synkronisera filsystem |
| 307 | sendmmsg | Skicka multipla meddelanden |
| 308 | setns | Skift namns rum |
| 309 | getcpu | Vilken CPU kör? |
| 310 | process_vm_readv | Läs minne från annan process |
| 311 | process_vm_writev | Skriv minne till annan process |
| 312 | kcmp | Jämför resurser mellan processer |
| 313 | finit_module | Ladda kernel-modul via fd |
| 314 | sched_setattr | Sätt schemaläggnings-attribut |
| 315 | sched_getattr | Hämta schemaläggnings-attribut |
| 316 | renameat2 | Atomisk filbyte |
| 317 | seccomp | Sandbox-läge |
| 318 | getrandom | Slumpdata |
| 319 | memfd_create | Skapa anonymous fd-minne |
| 320 | kexec_file_load | Ladda signerat kernelbild |
| 321 | bpf | Packet-filter API |
| 322 | execveat | Exec relativt katalogdeskriptor |
| 323 | userfaultfd | userfault-hantering |
| 324 | membarrier | Min-barriär |
| 325 | mlock2 | mlock med flags |
| 326 | copy_file_range | Effektivt filkopiering |
| 327 | preadv2 | Variant av preadv med flags |
| 328 | pwritev2 | Variant av pwritev med flags |