- unstable 4.31.0-1
| sysctl(2) | System Calls Manual | sysctl(2) |
الاسم¶
sysctl - قراءة/كتابة معلمات النظام
موجز¶
#include <unistd.h> #include <linux/sysctl.h>
[[deprecated]] int _sysctl(struct __sysctl_args *args);
الوصف¶
استدعاء النظام هذا لم يعد موجودًا على النوى الحالية! انظر الملاحظات.
استدعاء _sysctl() يقرأ و/أو يكتب معلمات النواة. على سبيل المثال، اسم المضيف، أو الحد الأقصى لعدد الملفات المفتوحة. الوسيط له الشكل
struct __sysctl_args {
int *name; /* متجه عدد صحيح يصف المتغير */
int nlen; /* عدد عناصر هذا المتجه */
void *oldval; /* 0 أو عنوان تخزين القيمة القديمة */
size_t *oldlenp; /* المساحة المتاحة للقيمة القديمة,
يحل محلها الحجم الفعلي للقيمة القديمة */
void *newval; /* 0 أو عنوان القيمة الجديدة */
size_t newlen; /* حجم القيمة الجديدة */
};
يقوم هذا الاستدعاء ببحث في بنية شجرية، تشبه على الأرجح شجرة دليل تحت /proc/sys، وإذا تم العثور على العنصر المطلوب، يستدعي روتينًا مناسبًا لقراءة القيمة أو تعديلها.
قيمة الإرجاع¶
عند الإكمال بنجاح، يُرجع _sysctl() 0. وإلا، تُرجع قيمة -1 ويُضبط errno للإشارة إلى الخطأ.
الأخطاء¶
المعايير¶
لينكس.
التاريخ¶
4.4BSD، لينكس 1.3.57. أُزيل في لينكس 5.5، glibc 2.32.
فقط لينكس لديه المرآة /proc/sys، وتختلف مخططات تسمية الكائنات بين لينكس و4.4BSD، لكن تعريف دالة sysctl() هو نفسه في كليهما.
ملاحظات¶
كان استخدام استدعاء النظام هذا مثبطًا لفترة طويلة: منذ لينكس 2.6.24، تؤدي استخدامات استدعاء النظام هذا إلى تحذيرات في سجل النواة، وفي لينكس 5.5، أُزيل استدعاء النظام نهائيًا. استخدم واجهة /proc/sys بدلاً من ذلك.
لاحظ أنه على النوى الأقدم حيث لا يزال استدعاء النظام هذا موجودًا، فهو متاح فقط إذا تم تكوين النواة مع خيار CONFIG_SYSCTL_SYSCALL. علاوة على ذلك، لا يوفر glibc غلافًا لاستدعاء النظام هذا، مما يستلزم استخدام syscall(2).
العلل¶
تختلف أسماء الكائنات بين إصدارات النواة، مما يجعل استدعاء النظام هذا عديم القيمة للتطبيقات.
ليست كل الكائنات المتاحة موثقة بشكل صحيح.
ليس من الممكن بعد تغيير نظام التشغيل بالكتابة إلى /proc/sys/kernel/ostype.
أمثلة¶
#define _GNU_SOURCE
#include <stdcountof.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/syscall.h>
#include <unistd.h>
#include <linux/sysctl.h>
int _sysctl(struct __sysctl_args *args);
#define OSNAMESZ 100
int
main(void)
{
int name[] = { CTL_KERN, KERN_OSTYPE };
char osname[OSNAMESZ];
size_t osnamelth;
struct __sysctl_args args;
memset(&args, 0, sizeof(args));
args.name = name;
args.nlen = countof(name);
args.oldval = osname;
args.oldlenp = &osnamelth;
osnamelth = sizeof(osname);
if (syscall(SYS__sysctl, &args) == -1) {
perror("_sysctl");
exit(EXIT_FAILURE);
}
printf("This machine is running %*s\n", (int) osnamelth, osname);
exit(EXIT_SUCCESS);
}
انظر أيضًا¶
ترجمة¶
تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي <zayed.alsaidi@gmail.com>
هذه الترجمة هي وثيقة مجانية؛ راجع رخصة جنو العامة الإصدار 3 أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات.
إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: kde-l10n-ar@kde.org.
| 10 فبراير 2026 | صفحات دليل لينكس 6.18 |