syscalls(2)

الاسم
syscalls - استدعاءات نظام لينكس

موجز
استدعاءات نظام لينكس.

الوصف
استدعاء النظام هو الواجهة الأساسية بين التطبيقات ونواة لينكس.

  استدعاءات النظام ودوال التغليف المكتبية
لا تُستدعى استدعاءات النظام مباشرةً في العادة، بل عبر دوال تغليف في glibc (أو ربما مكتبة أخرى). لتفاصيل الاستدعاء المباشر لاستدعاء نظام، انظر intro(2). غالباً، ولكن ليس دائماً، يكون اسم دالة التغليف هو نفس اسم استدعاء النظام الذي تستدعيه. على سبيل المثال، تحتوي glibc على الدالة chdir() التي تستدعي استدعاء نظام "chdir" الأساسي.

غالباً ما تكون دالة تغليف glibc بسيطة للغاية، حيث لا تقوم إلا بعمل قليل بخلاف نسخ الوسائط إلى السجلات الصحيحة قبل استدعاء استدعاء النظام، ثم ضبط errno بشكل مناسب بعد عودة استدعاء النظام. (هذه هي نفس الخطوات التي تُنفذ بواسطة syscall(2)، والتي يمكن استخدامها لاستدعاء استدعاءات النظام التي لا تتوفر لها دالة تغليف). ملاحظة: تشير استدعاءات النظام إلى الفشل بإرجاع رقم خطأ سالب إلى المستدعِي في المعماريات التي لا تحتوي على سجل/علم خطأ منفصل، كما هو موضح في syscall(2)؛ وعند حدوث ذلك، تقوم دالة التغليف بعكس رقم الخطأ المُرجع (لجعله موجباً)، ونسخه إلى errno، وإرجاع -1 إلى مستدعِي التغليف.

ومع ذلك، تقوم دالة التغليف أحياناً ببعض العمل الإضافي قبل استدعاء استدعاء النظام. على سبيل المثال، يوجد حالياً (لأسباب موصوفة أدناه) استدعاءا نظام مرتبطان، هما truncate(2) و truncate64(2)، وتتحقق دالة تغليف glibc المسماة truncate() من أيهما توفره النواة وتحدد أيهما يجب استخدامه.

  قائمة استدعاءات النظام
فيما يلي قائمة باستدعاءات نظام لينكس. في القائمة، يشير عمود نواة إلى إصدار النواة لاستدعاءات النظام التي كانت جديدة في لينكس 2.2، أو ظهرت منذ ذلك الإصدار. لاحظ النقاط التالية:

•   حيث لا يُشار إلى إصدار للنواة، يكون استدعاء النظام قد ظهر في لينكس 1.0 أو قبل ذلك.

•   حيث يُميز استدعاء النظام بالرمز "1.2"، فهذا يعني أن استدعاء النظام ظهر غالباً في إصدار نواة لينكس 1.1.x، وظهر لأول مرة في نواة مستقرة مع 1.2. (بدأ تطوير نواة لينكس 1.2 من فرع لينكس 1.0.6 عبر سلسلة أنوية لينكس 1.1.x غير المستقرة).

•   حيث يُميز استدعاء النظام بالرمز "2.0"، فهذا يعني أن استدعاء النظام ظهر غالباً في إصدار نواة لينكس 1.3.x، وظهر لأول مرة في نواة مستقرة مع لينكس 2.0. (بدأ تطوير نواة لينكس 2.0 من فرع لينكس 1.2.x، في مكان ما حول لينكس 1.2.10، عبر سلسلة أنوية لينكس 1.3.x غير المستقرة).

•   حيث يُميز استدعاء النظام بالرمز "2.2"، فهذا يعني أن استدعاء النظام ظهر غالباً في إصدار نواة لينكس 2.1.x، وظهر لأول مرة في نواة مستقرة مع لينكس 2.2.0. (بدأ تطوير نواة لينكس 2.2 من فرع لينكس 2.0.21 عبر سلسلة أنوية لينكس 2.1.x غير المستقرة).

•   حيث يُميز استدعاء النظام بالرمز "2.4"، فهذا يعني أن استدعاء النظام ظهر غالباً في إصدار نواة لينكس 2.3.x، وظهر لأول مرة في نواة مستقرة مع لينكس 2.4.0. (بدأ تطوير نواة لينكس 2.4 من فرع لينكس 2.2.8 عبر سلسلة أنوية لينكس 2.3.x غير المستقرة).

•   حيث يُميز استدعاء النظام بالرمز "2.6"، فهذا يعني أن استدعاء النظام ظهر غالباً في إصدار نواة لينكس 2.5.x، وظهر لأول مرة في نواة مستقرة مع لينكس 2.6.0. (بدأ تطوير لينكس 2.6 من فرع لينكس 2.4.15 عبر سلسلة أنوية لينكس 2.5.x غير المستقرة).

•   بدءاً من لينكس 2.6.0، تغير نموذج التطوير، وقد تظهر استدعاءات نظام جديدة في كل إصدار من إصدارات لينكس 2.6.x. في هذه الحالة، يُعرض رقم الإصدار الدقيق الذي ظهر فيه استدعاء النظام. ويستمر هذا العرف مع سلسلة أنوية لينكس 3.x التي تلت لينكس 2.6.39؛ وسلسلة أنوية لينكس 4.x التي تلت لينكس 3.19؛ وسلسلة أنوية لينكس 5.x التي تلت لينكس 4.20؛ وسلسلة أنوية لينكس 6.x التي تلت لينكس 5.19.

•   في بعض الحالات، أُضيف استدعاء نظام إلى سلسلة أنوية مستقرة بعد تفرعها من سلسلة الأنوية المستقرة السابقة، ثم نُقلت لاحقًا (backported) إلى سلسلة الأنوية المستقرة الأقدم. على سبيل المثال، نُقلت بعض استدعاءات النظام التي ظهرت في لينكس 2.6.x إلى إصدار لينكس 2.4.x بعد لينكس 2.4.15. عندما يكون الأمر كذلك، يُدرج الإصدار الذي ظهر فيه استدعاء النظام في كلتا سلسلتي الأنوية الرئيستين.

قائمة استدعاءات النظام المتوفرة حتى لينكس 5.14 (أو في حالات قليلة فقط في أنوية أقدم) هي كما يلي:

استدعاء النظام | نواة | ملاحظات
_llseek(2) | 1.2
_newselect(2) | 2.0
_sysctl(2) | 2.0 | أُزيل في 5.5
accept(2) | 2.0 | انظر الملاحظات على socketcall(2)
accept4(2) | 2.6.28
access(2) | 1.0
acct(2) | 1.0
add_key(2) | 2.6.10
adjtimex(2) | 1.0
alarm(2) | 1.0
alloc_hugepages(2) | 2.5.36 | أُزيل في 2.5.44
arc_gettls(2) | 3.9 | ARC فقط
arc_settls(2) | 3.9 | ARC فقط
arc_usr_cmpxchg(2) | 4.9 | ARC فقط
arch_prctl(2) | 2.6 | x86_64، وx86 منذ 4.12
atomic_barrier(2) | 2.6.34 | m68k فقط
atomic_cmpxchg_32(2) | 2.6.34 | m68k فقط
bdflush(2) | 1.2 | مهمَل (لا يفعل شيئاً) منذ 2.6، أُزيل في 5.15
bind(2) | 2.0 | انظر الملاحظات على socketcall(2)
bpf(2) | 3.18
brk(2) | 1.0
breakpoint(2) | 2.2 | ARM OABI فقط، عُرّف ببادئة __ARM_NR
cacheflush(2) | 1.2 | ليس على x86
capget(2) | 2.2
capset(2) | 2.2
chdir(2) | 1.0
chmod(2) | 1.0
chown(2) | 2.2 | انظر chown(2) لتفاصيل الإصدار
chown32(2) | 2.4
chroot(2) | 1.0
clock_adjtime(2) | 2.6.39
clock_getres(2) | 2.6
clock_gettime(2) | 2.6
clock_nanosleep(2) | 2.6
clock_settime(2) | 2.6
clone2(2) | 2.4 | IA-64 فقط
clone(2) | 1.0
clone3(2) | 5.3
close(2) | 1.0
close_range(2) | 5.9
connect(2) | 2.0 | انظر الملاحظات على socketcall(2)
copy_file_range(2) | 4.5
creat(2) | 1.0
create_module(2) | 1.0 | أُزيل في 2.6
delete_module(2) | 1.0
dup(2) | 1.0
dup2(2) | 1.0
dup3(2) | 2.6.27
epoll_create(2) | 2.6
epoll_create1(2) | 2.6.27
epoll_ctl(2) | 2.6
epoll_pwait(2) | 2.6.19
epoll_pwait2(2) | 5.11
epoll_wait(2) | 2.6
eventfd(2) | 2.6.22
eventfd2(2) | 2.6.27
execv(2) | 2.0 | لأنظمة SPARC/SPARC64 فقط، للتوافق مع SunOS
execve(2) | 1.0
execveat(2) | 3.19
exit(2) | 1.0
exit_group(2) | 2.6
faccessat(2) | 2.6.16
faccessat2(2) | 5.8
fadvise64(2) | 2.6
fadvise64_64(2) | 2.6
fallocate(2) | 2.6.23
fanotify_init(2) | 2.6.37
fanotify_mark(2) | 2.6.37
fchdir(2) | 1.0
fchmod(2) | 1.0
fchmodat(2) | 2.6.16
fchown(2) | 1.0
fchown32(2) | 2.4
fchownat(2) | 2.6.16
fcntl(2) | 1.0
fcntl64(2) | 2.4
fdatasync(2) | 2.0
fgetxattr(2) | 2.6; 2.4.18
finit_module(2) | 3.8
flistxattr(2) | 2.6; 2.4.18
flock(2) | 2.0
fork(2) | 1.0
free_hugepages(2) | 2.5.36 | أُزيل في 2.5.44
fremovexattr(2) | 2.6; 2.4.18
fsconfig(2) | 5.2
fsetxattr(2) | 2.6; 2.4.18
fsmount(2) | 5.2
fsopen(2) | 5.2
fspick(2) | 5.2
fstat(2) | 1.0
fstat64(2) | 2.4
fstatat64(2) | 2.6.16
fstatfs(2) | 1.0
fstatfs64(2) | 2.6
fsync(2) | 1.0
ftruncate(2) | 1.0
ftruncate64(2) | 2.4
futex(2) | 2.6
futimesat(2) | 2.6.16
get_kernel_syms(2) | 1.0 | أُزيل في 2.6
get_mempolicy(2) | 2.6.6
get_robust_list(2) | 2.6.17
get_thread_area(2) | 2.6
get_tls(2) | 4.15 | لأنظمة ARM OABI فقط، له البادئة __ARM_NR
getcpu(2) | 2.6.19
getcwd(2) | 2.2
getdents(2) | 2.0
getdents64(2) | 2.4
getdomainname(2) | 2.2 | لأنظمة SPARC، وSPARC64؛ متوفر كـ osf_getdomainname(2) على معماريّة Alpha منذ لينكس 2.0
getdtablesize(2) | 2.0 | لأنظمة SPARC (أُزيل في 2.6.26)، متوفر على Alpha كـ osf_getdtablesize(2)
getegid(2) | 1.0
getegid32(2) | 2.4
geteuid(2) | 1.0
geteuid32(2) | 2.4
getgid(2) | 1.0
getgid32(2) | 2.4
getgroups(2) | 1.0
getgroups32(2) | 2.4
gethostname(2) | 2.0 | لأنظمة Alpha، كان متوفراً على SPARC حتى لينكس 2.6.26
getitimer(2) | 1.0
getpeername(2) | 2.0 | انظر الملاحظات على socketcall(2)
getpagesize(2) | 2.0 | لأنظمة Alpha، وSPARC/SPARC64 فقط
getpgid(2) | 1.0
getpgrp(2) | 1.0
getpid(2) | 1.0
getppid(2) | 1.0
getpriority(2) | 1.0
getrandom(2) | 3.17
getresgid(2) | 2.2
getresgid32(2) | 2.4
getresuid(2) | 2.2
getresuid32(2) | 2.4
getrlimit(2) | 1.0
getrusage(2) | 1.0
getsid(2) | 2.0
getsockname(2) | 2.0 | انظر الملاحظات على socketcall(2)
getsockopt(2) | 2.0 | انظر الملاحظات على socketcall(2)
gettid(2) | 2.4.11
gettimeofday(2) | 1.0
getuid(2) | 1.0
getuid32(2) | 2.4
getunwind(2) | 2.4.8 | لأنظمة IA-64 فقط؛ مهجور
getxattr(2) | 2.6; 2.4.18
getxgid(2) | 2.0 | لأنظمة Alpha فقط؛ راجع الملاحظات (NOTES)
getxpid(2) | 2.0 | لأنظمة Alpha فقط؛ راجع الملاحظات (NOTES)
getxuid(2) | 2.0 | لأنظمة Alpha فقط؛ راجع الملاحظات (NOTES)
init_module(2) | 1.0
inotify_add_watch(2) | 2.6.13
inotify_init(2) | 2.6.13
inotify_init1(2) | 2.6.27
inotify_rm_watch(2) | 2.6.13
io_cancel(2) | 2.6
io_destroy(2) | 2.6
io_getevents(2) | 2.6
io_pgetevents(2) | 4.18
io_setup(2) | 2.6
io_submit(2) | 2.6
io_uring_enter(2) | 5.1
io_uring_register(2) | 5.1
io_uring_setup(2) | 5.1
ioctl(2) | 1.0
ioperm(2) | 1.0
iopl(2) | 1.0
ioprio_get(2) | 2.6.13
ioprio_set(2) | 2.6.13
ipc(2) | 1.0
kcmp(2) | 3.5
kern_features(2) | 3.7 | لأنظمة SPARC64 فقط
kexec_file_load(2) | 3.17
kexec_load(2) | 2.6.13
keyctl(2) | 2.6.10
kill(2) | 1.0
landlock_add_rule(2) | 5.13
landlock_create_ruleset(2) | 5.13
landlock_restrict_self(2) | 5.13
lchown(2) | 1.0 | انظر chown(2) لتفاصيل الإصدار
lchown32(2) | 2.4
lgetxattr(2) | 2.6; 2.4.18
link(2) | 1.0
linkat(2) | 2.6.16
listen(2) | 2.0 | انظر الملاحظات على socketcall(2)
listxattr(2) | 2.6; 2.4.18
llistxattr(2) | 2.6; 2.4.18
lookup_dcookie(2) | 2.6
lremovexattr(2) | 2.6; 2.4.18
lseek(2) | 1.0
lsetxattr(2) | 2.6; 2.4.18
lstat(2) | 1.0
lstat64(2) | 2.4
madvise(2) | 2.4
mbind(2) | 2.6.6
memory_ordering(2) | 2.2 | لأنظمة SPARC64 فقط
membarrier(2) | 3.17
memfd_create(2) | 3.17
memfd_secret(2) | 5.14
migrate_pages(2) | 2.6.16
mincore(2) | 2.4
mkdir(2) | 1.0
mkdirat(2) | 2.6.16
mknod(2) | 1.0
mknodat(2) | 2.6.16
mlock(2) | 2.0
mlock2(2) | 4.4
mlockall(2) | 2.0
mmap(2) | 1.0
mmap2(2) | 2.4
modify_ldt(2) | 1.0
mount(2) | 1.0
move_mount(2) | 5.2
move_pages(2) | 2.6.18
mprotect(2) | 1.0
mq_getsetattr(2) | 2.6.6
mq_notify(2) | 2.6.6
mq_open(2) | 2.6.6
mq_timedreceive(2) | 2.6.6
mq_timedsend(2) | 2.6.6
mq_unlink(2) | 2.6.6
mremap(2) | 2.0
msgctl(2) | 2.0 | انظر الملاحظات حول ipc(2)
msgget(2) | 2.0 | انظر الملاحظات حول ipc(2)
msgrcv(2) | 2.0 | انظر الملاحظات حول ipc(2)
msgsnd(2) | 2.0 | انظر الملاحظات حول ipc(2)
msync(2) | 2.0
munlock(2) | 2.0
munlockall(2) | 2.0
munmap(2) | 1.0
name_to_handle_at(2) | 2.6.39
nanosleep(2) | 2.0
newfstatat(2) | 2.6.16 | انظر stat(2)
nfsservctl(2) | 2.2 | أُزيل في 3.1
nice(2) | 1.0
old_adjtimex(2) | 2.0 | لأنظمة Alpha فقط؛ راجع الملاحظات (NOTES)
old_getrlimit(2) | 2.4 | نسخة قديمة من getrlimit(2) استخدمت قيمة مختلفة لـ RLIM_INFINITY
oldfstat(2) | 1.0
oldlstat(2) | 1.0
oldolduname(2) | 1.0
oldstat(2) | 1.0
oldumount(2) | 2.4.116 | اسم استدعاء نظام umount(2) القديم على Alpha
olduname(2) | 1.0
open(2) | 1.0
open_by_handle_at(2) | 2.6.39
open_tree(2) | 5.2
openat(2) | 2.6.16
openat2(2) | 5.6
or1k_atomic(2) | 3.1 | لـ OpenRISC 1000 فقط
pause(2) | 1.0
pciconfig_iobase(2) | 2.2.15; 2.4 | ليس على x86
pciconfig_read(2) | 2.0.26; 2.2 | ليس على x86
pciconfig_write(2) | 2.0.26; 2.2 | ليس على x86
perf_event_open(2) | 2.6.31 | كانت perf_counter_open() في 2.6.31؛ أُعيدت تسميتها في 2.6.32
personality(2) | 1.2
perfctr(2) | 2.2 | لـ SPARC فقط؛ أُزيل في 2.6.34
perfmonctl(2) | 2.4 | لـ IA-64 فقط؛ أُزيل في 5.10
pidfd_getfd(2) | 5.6
pidfd_send_signal(2) | 5.1
pidfd_open(2) | 5.3
pipe(2) | 1.0
pipe2(2) | 2.6.27
pivot_root(2) | 2.4
pkey_alloc(2) | 4.8
pkey_free(2) | 4.8
pkey_mprotect(2) | 4.8
poll(2) | 2.0.36; 2.2
ppoll(2) | 2.6.16
prctl(2) | 2.2
pread64(2) |  | أُضيف باسم "pread" في 2.2؛ أُعيدت تسميته "pread64" في 2.6
preadv(2) | 2.6.30
preadv2(2) | 4.6
prlimit64(2) | 2.6.36
process_madvise(2) | 5.10
process_vm_readv(2) | 3.2
process_vm_writev(2) | 3.2
pselect6(2) | 2.6.16
ptrace(2) | 1.0
pwrite64(2) |  | أُضيف باسم "pwrite" في 2.2؛ أُعيدت تسميته "pwrite64" في 2.6
pwritev(2) | 2.6.30
pwritev2(2) | 4.6
query_module(2) | 2.2 | أُزيل في 2.6
quotactl(2) | 1.0
quotactl_fd(2) | 5.14
read(2) | 1.0
readahead(2) | 2.4.13
readdir(2) | 1.0
readlink(2) | 1.0
readlinkat(2) | 2.6.16
readv(2) | 2.0
reboot(2) | 1.0
recv(2) | 2.0 | انظر الملاحظات على socketcall(2)
recvfrom(2) | 2.0 | انظر الملاحظات على socketcall(2)
recvmsg(2) | 2.0 | انظر الملاحظات على socketcall(2)
recvmmsg(2) | 2.6.33
remap_file_pages(2) | 2.6 | مهجور منذ 3.16
removexattr(2) | 2.6; 2.4.18
rename(2) | 1.0
renameat(2) | 2.6.16
renameat2(2) | 3.15
request_key(2) | 2.6.10
restart_syscall(2) | 2.6
riscv_flush_icache(2) | 4.15 | لـ RISC-V فقط
rmdir(2) | 1.0
rseq(2) | 4.18
rt_sigaction(2) | 2.2
rt_sigpending(2) | 2.2
rt_sigprocmask(2) | 2.2
rt_sigqueueinfo(2) | 2.2
rt_sigreturn(2) | 2.2
rt_sigsuspend(2) | 2.2
rt_sigtimedwait(2) | 2.2
rt_tgsigqueueinfo(2) | 2.6.31
rtas(2) | 2.6.2 | لـ PowerPC/PowerPC64 فقط
s390_runtime_instr(2) | 3.7 | لـ s390 فقط
s390_pci_mmio_read(2) | 3.19 | لـ s390 فقط
s390_pci_mmio_write(2) | 3.19 | لـ s390 فقط
s390_sthyi(2) | 4.15 | لـ s390 فقط
s390_guarded_storage(2) | 4.12 | لـ s390 فقط
sched_get_affinity(2) | 2.6 | اسم sched_getaffinity(2) على SPARC و SPARC64
sched_get_priority_max(2) | 2.0
sched_get_priority_min(2) | 2.0
sched_getaffinity(2) | 2.6
sched_getattr(2) | 3.14
sched_getparam(2) | 2.0
sched_getscheduler(2) | 2.0
sched_rr_get_interval(2) | 2.0
sched_set_affinity(2) | 2.6 | اسم sched_setaffinity(2) على SPARC و SPARC64
sched_setaffinity(2) | 2.6
sched_setattr(2) | 3.14
sched_setparam(2) | 2.0
sched_setscheduler(2) | 2.0
sched_yield(2) | 2.0
seccomp(2) | 3.17
select(2) | 1.0
semctl(2) | 2.0 | انظر الملاحظات حول ipc(2)
semget(2) | 2.0 | انظر الملاحظات حول ipc(2)
semop(2) | 2.0 | انظر الملاحظات حول ipc(2)
semtimedop(2) | 2.6; 2.4.22
send(2) | 2.0 | انظر الملاحظات على socketcall(2)
sendfile(2) | 2.2
sendfile64(2) | 2.6; 2.4.19
sendmmsg(2) | 3.0
sendmsg(2) | 2.0 | انظر الملاحظات على socketcall(2)
sendto(2) | 2.0 | انظر الملاحظات على socketcall(2)
set_mempolicy(2) | 2.6.6
set_robust_list(2) | 2.6.17
set_thread_area(2) | 2.6
set_tid_address(2) | 2.6
set_tls(2) | 2.6.11 | لأنظمة ARM OABI/EABI فقط (الثابت له البادئة __ARM_NR)
setdomainname(2) | 1.0
setfsgid(2) | 1.2
setfsgid32(2) | 2.4
setfsuid(2) | 1.2
setfsuid32(2) | 2.4
setgid(2) | 1.0
setgid32(2) | 2.4
setgroups(2) | 1.0
setgroups32(2) | 2.4
sethae(2) | 2.0 | لأنظمة Alpha فقط؛ راجع الملاحظات (NOTES)
sethostname(2) | 1.0
setitimer(2) | 1.0
setns(2) | 3.0
setpgid(2) | 1.0
setpgrp(2) | 2.0 | اسم بديل لـ setpgid(2) على Alpha
setpriority(2) | 1.0
setregid(2) | 1.0
setregid32(2) | 2.4
setresgid(2) | 2.2
setresgid32(2) | 2.4
setresuid(2) | 2.2
setresuid32(2) | 2.4
setreuid(2) | 1.0
setreuid32(2) | 2.4
setrlimit(2) | 1.0
setsid(2) | 1.0
setsockopt(2) | 2.0 | انظر الملاحظات على socketcall(2)
settimeofday(2) | 1.0
setuid(2) | 1.0
setuid32(2) | 2.4
setup(2) | 1.0 | أُزيل في 2.2
setxattr(2) | 2.6; 2.4.18
sgetmask(2) | 1.0
shmat(2) | 2.0 | انظر الملاحظات حول ipc(2)
shmctl(2) | 2.0 | انظر الملاحظات حول ipc(2)
shmdt(2) | 2.0 | انظر الملاحظات حول ipc(2)
shmget(2) | 2.0 | انظر الملاحظات حول ipc(2)
shutdown(2) | 2.0 | انظر الملاحظات على socketcall(2)
sigaction(2) | 1.0
sigaltstack(2) | 2.2
signal(2) | 1.0
signalfd(2) | 2.6.22
signalfd4(2) | 2.6.27
sigpending(2) | 1.0
sigprocmask(2) | 1.0
sigreturn(2) | 1.0
sigsuspend(2) | 1.0
socket(2) | 2.0 | انظر الملاحظات على socketcall(2)
socketcall(2) | 1.0
socketpair(2) | 2.0 | انظر الملاحظات على socketcall(2)
spill(2) | 2.6.13 | لأنظمة Xtensa فقط
splice(2) | 2.6.17
spu_create(2) | 2.6.16 | لـ PowerPC/PowerPC64 فقط
spu_run(2) | 2.6.16 | لـ PowerPC/PowerPC64 فقط
ssetmask(2) | 1.0
stat(2) | 1.0
stat64(2) | 2.4
statfs(2) | 1.0
statfs64(2) | 2.6
statx(2) | 4.11
stime(2) | 1.0
subpage_prot(2) | 2.6.25 | لـ PowerPC/PowerPC64 فقط
swapcontext(2) | 2.6.3 | لـ PowerPC/PowerPC64 فقط
switch_endian(2) | 4.1 | لأنظمة PowerPC64 فقط
swapoff(2) | 1.0
swapon(2) | 1.0
symlink(2) | 1.0
symlinkat(2) | 2.6.16
sync(2) | 1.0
sync_file_range(2) | 2.6.17
sync_file_range2(2) | 2.6.22
syncfs(2) | 2.6.39
sys_debug_setcontext(2) | 2.6.11 | لـ PowerPC فقط
syscall(2) | 1.0 | لا يزال متوفراً على ARM OABI و MIPS O32 ABI
sysfs(2) | 1.2
sysinfo(2) | 1.0
syslog(2) | 1.0
sysmips(2) | 2.6.0 | لأنظمة MIPS فقط
tee(2) | 2.6.17
tgkill(2) | 2.6
time(2) | 1.0
timer_create(2) | 2.6
timer_delete(2) | 2.6
timer_getoverrun(2) | 2.6
timer_gettime(2) | 2.6
timer_settime(2) | 2.6
timerfd_create(2) | 2.6.25
timerfd_gettime(2) | 2.6.25
timerfd_settime(2) | 2.6.25
times(2) | 1.0
tkill(2) | 2.6; 2.4.22
truncate(2) | 1.0
truncate64(2) | 2.4
ugetrlimit(2) | 2.4
umask(2) | 1.0
umount(2) | 1.0
umount2(2) | 2.2
uname(2) | 1.0
unlink(2) | 1.0
unlinkat(2) | 2.6.16
unshare(2) | 2.6.16
uselib(2) | 1.0
ustat(2) | 1.0
userfaultfd(2) | 4.3
usr26(2) | 2.4.8.1 | واجهة ARM OABI فقط
usr32(2) | 2.4.8.1 | واجهة ARM OABI فقط
utime(2) | 1.0
utimensat(2) | 2.6.22
utimes(2) | 2.2
utrap_install(2) | 2.2 | لأنظمة SPARC64 فقط
vfork(2) | 2.2
vhangup(2) | 1.0
vm86old(2) | 1.0 | كانت "vm86"؛ أُعيدت تسميتها في 2.0.28/2.2
vm86(2) | 2.0.28؛ 2.2
vmsplice(2) | 2.6.17
wait4(2) | 1.0
waitid(2) | 2.6.10
waitpid(2) | 1.0
write(2) | 1.0
writev(2) | 2.0
xtensa(2) | 2.6.13 | لأنظمة Xtensa فقط

تُجمع كل استدعاءات المقابس (socket calls) في العديد من المنصات، بما في ذلك x86-32، (عبر دوال تغليف glibc) من خلال socketcall(2) وبالمثل تُجمع استدعاءات System V IPC من خلال ipc(2).

على الرغم من حجز خانات لها في جدول استدعاءات النظام، إلا أن استدعاءات النظام التالية غير مُنفّذة في النواة القياسية: afs_syscall(2)، وbreak(2)، وftime(2)، وgetpmsg(2)، وgtty(2)، وidle(2)، وlock(2)، وmadvise1(2)، وmpx(2)، وphys(2)، وprof(2)، وprofil(2)، وputpmsg(2)، وsecurity(2)، وstty(2)، وtuxcall(2)، وulimit(2)، وvserver(2) (انظر أيضًا unimplemented(2)). ومع ذلك، توجد ftime(3)، وprofil(3)، وulimit(3) كروتينات مكتبية. الخانة المخصصة لـ phys(2) مستخدمة منذ لينكس 2.1.116 لـ umount(2)؛ ولن تُنفذ phys(2) أبدًا. استدعاءات getpmsg(2) وputpmsg(2) مخصصة للنوى المرقعة لدعم STREAMS، وقد لا توجد أبدًا في النواة القياسية.

وُجد لفترة وجيزة set_zone_reclaim(2)، الذي أُضيف في لينكس 2.6.13، وحُذف في لينكس 2.6.16؛ لم يكن استدعاء النظام هذا متاحًا أبدًا لمساحة المستخدم.

  استدعاءات النظام في المنافذ المحذوفة
وُجدت بعض استدعاءات النظام فقط في معماريات لينكس التي حُذفت منذ ذلك الحين من النواة:

Blackfin (حُذف المنفذ في لينكس 4.17)
    •   bfin_spinlock(2) (أُضيف في لينكس 2.6.22)
    •   dma_memcpy(2) (أُضيف في لينكس 2.6.22)
    •   sram_alloc(2) (أُضيف في لينكس 2.6.22)
    •   sram_free(2) (أُضيف في لينكس 2.6.22)

Metag (حُذف المنفذ في لينكس 4.17)
    •   metag_get_tls(2) (أُضيف في لينكس 3.9)
    •   metag_set_fpu_flags(2) (أُضيف في لينكس 3.9)
    •   metag_set_tls(2) (أُضيف في لينكس 3.9)
    •   metag_setglobalbit(2) (أُضيف في لينكس 3.9)

Tile (حُذف المنفذ في لينكس 4.17)
    •   cmpxchg_badaddr(2) (أُضيف في لينكس 2.6.36)

ملاحظات
بشكل عام، يمكن العثور على الكود التابع لاستدعاء النظام ذي الرقم __NR_xxx المُعرّف في /usr/include/asm/unistd.h في مصدر نواة لينكس في الروتين sys_xxx(). ومع ذلك، هناك العديد من الاستثناءات، ويرجع ذلك في الغالب إلى استبدال استدعاءات النظام القديمة بأخرى أحدث، وقد عولج هذا الأمر بشكل غير منهجي إلى حد ما. في المنصات التي تحتوي على محاكاة لأنظمة تشغيل مملوكة، مثل sparc وsparc64 وalpha، هناك العديد من استدعاءات النظام الإضافية؛ وتحتوي mips64 أيضًا على مجموعة كاملة من استدعاءات النظام ذات 32 بت.

بمرور الوقت، أصبحت التغييرات في واجهات بعض استدعاءات النظام ضرورية. وكان أحد أسباب هذه التغييرات هو الحاجة إلى زيادة حجم الهياكل أو القيم السلمية الممررة إلى استدعاء النظام. وبسبب هذه التغييرات، تمتلك بعض المعماريات (لاسيما المعماريات القديمة ذات 32 بت مثل i386) الآن مجموعات متنوعة من استدعاءات النظام ذات الصلة (مثل truncate(2) وtruncate64(2)) التي تؤدي مهامًا مماثلة، ولكنها تختلف في التفاصيل مثل حجم وسائطها. (كما ذُكر سابقًا، لا تدرك التطبيقات ذلك عمومًا: تقوم دوال تغليف glibc ببعض العمل للتأكد من استدعاء استدعاء النظام الصحيح، والحفاظ على توافق ABI للبرمجيات الثنائية القديمة). وفيما يلي أمثلة على استدعاءات النظام التي توجد في إصدارات متعددة:

•   توجد الآن ثلاثة إصدارات مختلفة من stat(2): sys_stat() (الخانة __NR_oldstat)، وsys_newstat() (الخانة __NR_stat)، وsys_stat64() (الخانة __NR_stat64)، والأخير هو الأحدث. وينطبق أمر مماثل على lstat(2) وfstat(2).

•   وبالمثل، تشير التعريفات __NR_oldolduname و__NR_olduname و__NR_uname إلى الروتينات sys_olduname() وsys_uname() وsys_newuname().

•   في لينكس 2.0، ظهر إصدار جديد من vm86(2)، وسُمي روتينا النواة القديم والجديد باسم sys_vm86old() وsys_vm86().

•   في لينكس 2.4، ظهر إصدار جديد من getrlimit(2)، وسُمي روتينا النواة القديم والجديد باسم sys_old_getrlimit() (الخانة __NR_getrlimit) وsys_getrlimit() (الخانة __NR_ugetrlimit).

•   زاد لينكس 2.4 حجم معرفات المستخدمين والمجموعات من 16 إلى 32 بت. ولدعم هذا التغيير، أُضيفت مجموعة من استدعاءات النظام (مثل chown32(2) وgetuid32(2) وgetgroups32(2) وsetresuid32(2))، لتحل محل الاستدعاءات السابقة التي تحمل الاسم نفسه بدون اللاحقة "32".

•   أضاف لينكس 2.4 دعمًا للتطبيقات في معماريات 32 بت للوصول إلى الملفات الكبيرة (أي الملفات التي لا يمكن تمثيل أحجامها وإزاحاتها بـ 32 بت). ولدعم هذا التغيير، كانت هناك حاجة إلى بدائل لاستدعاءات النظام التي تتعامل مع إزاحات الملفات وأحجامها. وبناءً على ذلك، أُضيفت استدعاءات النظام التالية: fcntl64(2) وgetdents64(2) وstat64(2) وstatfs64(2) وtruncate64(2)، وأشباهها التي تعمل مع واصفات الملفات أو الروابط الرمزية. تحل استدعاءات النظام هذه محل استدعاءات النظام الأقدم التي تحمل نفس الاسم بدون اللاحقة "64"، باستثناء حالة استدعاءات "stat".

    في المنصات الأحدث التي لا تدعم سوى الوصول إلى الملفات بـ 64 بت ومعرفات UID/GID بـ 32 بت (مثل alpha وia64 وs390x وx86-64)، توجد نسخة واحدة فقط من استدعاءات نظام UID/GID والوصول إلى الملفات. وفي المنصات (عادةً منصات 32 بت) التي توجد بها استدعاءات *64 و*32، تُعد الإصدارات الأخرى مهجورة.

•   أُضيفت استدعاءات rt_sig* في لينكس 2.2 لدعم إضافة إشارات الوقت الحقيقي (انظر signal(7)). تحل استدعاءات النظام هذه محل استدعاءات النظام الأقدم التي تحمل الاسم نفسه بدون البادئة "rt_".

•   تستخدم استدعاءات النظام select(2) وmmap(2) خمسة وسائط أو أكثر، مما تسبب في مشاكل في الطريقة التي كان يتم بها إعداد تمرير الوسائط في i386. وبالتالي، بينما تمتلك المعماريات الأخرى sys_select() وsys_mmap() المقابلة لـ __NR_select و__NR_mmap، نجد في i386 عوضًا عن ذلك old_select() وold_mmap() (وهي روتينات تستخدم مؤشرًا إلى كتلة وسائط). في هذه الأيام، لم يعد تمرير خمسة وسائط يمثل مشكلة، وهناك __NR__newselect الذي يقابل مباشرة sys_select() وبالمثل __NR_mmap2. وتعد s390x هي المعمارية الوحيدة ذات 64 بت التي تمتلك old_mmap().

  تفاصيل خاصة بالمعمارية: Alpha

getxgid(2)
    يُرجع زوجًا من GID وGID الفعال عبر السجلين r0 وr20؛ وهو مُوفر بدلًا من getgid(2) وgetegid(2).

getxpid(2)
    يُرجع زوجًا من PID وPID الأب عبر السجلين r0 وr20؛ وهو مُوفر بدلًا من getpid(2) وgetppid(2).

old_adjtimex(2)
    هو بديل لـ adjtimex(2) يستخدم struct timeval32، من أجل التوافق مع OSF/1.

getxuid(2)
    يُرجع زوجًا من UID وUID الفعال عبر السجلين r0 وr20؛ وهو مُوفر بدلًا من getuid(2) وgeteuid(2).

sethae(2)
    يُستخدم لضبط سجل ملحق عنوان المضيف (Host Address Extension) في أجهزة Alpha منخفضة التكلفة من أجل الوصول إلى مساحة العنوان التي تتجاوز أول 27 بت.

انظر أيضًا
intro(2)، وsyscall(2)، وunimplemented(2)، وerrno(3)، وlibc(7)، وvdso(7)، وausyscall(8)

ترجمة
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>

هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 (https://www.gnu.org/licenses/gpl-3.0.html) أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.

إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.