.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993, Thomas Koenig .\" Copyright 2014, Michael Kerrisk .\" Copyright, the authors of the Linux man-pages project .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH system 3 "8 فبراير 2026" "صفحات دليل لينكس 6.18" .SH الاسم system \- تنفيذ أمر شل .SH المكتبة مكتبة سي المعيارية (\fIlibc\fP،\ \fI\-lc\fP) .SH موجز .nf \fB#include \fP .P \fBint system(const char *\fP\fIcommand\fP\fB);\fP .fi .SH الوصف تتصرف دالة المكتبة \fBsystem\fP() كما لو أنها استخدمت \fBfork\fP(2) لإنشاء عملية فرعية تنفذ أمر الشل المحدد في \fIcommand\fP باستخدام \fBexecl\fP(3) كالتالي: .P .in +4n .EX execl("/bin/sh", "sh", "\-c", command, (char *) NULL); .EE .in .P تعود \fBsystem\fP() بعد اكتمال الأمر. .P أثناء تنفيذ الأمر، يُحجب \fBSIGCHLD\fP، ويُتجاهل \fBSIGINT\fP و \fBSIGQUIT\fP، في العملية التي تستدعي \fBsystem\fP(). (تُعالج هذه الإشارات وفقًا لمبدئياتها داخل العملية الفرعية التي تنفذ \fIcommand\fP.) .P إذا كان \fIcommand\fP فارغًا، تعيد \fBsystem\fP() حالة تشير إلى توفر شل في النظام. .SH "قيمة الإرجاع" قيمة عودة \fBsystem\fP() هي إحدى التالية: .IP \[bu] 3 إذا كان \fIcommand\fP فارغًا، فقيمة غير صفرية إذا توفر شل، أو 0 إذا لم يتوفر شل. .IP \[bu] إذا تعذر إنشاء عملية فرعية، أو تعذر استرداد حالتها، تكون قيمة العودة \-1 ويُضبط \fIerrno\fP للإشارة إلى الخطأ. .IP \[bu] إذا تعذر تنفيذ شل في العملية الفرعية، تكون قيمة العودة كما لو أن شل الفرعية أنهيت باستدعاء \fB_exit\fP(2) بالحالة 127. .IP \[bu] إذا نجحت جميع استدعاءات النظام، تكون قيمة العودة هي حالة إنهاء شل الفرعية المستخدمة لتنفيذ \fIcommand\fP. (حالة إنهاء شل هي حالة إنهاء آخر أمر تنفذه.) .P في الحالتين الأخيرتين، قيمة العودة هي "حالة انتظار" يمكن فحصها باستخدام الكليّات الموصوفة في \fBwaitpid\fP(2). (أي \fBWIFEXITED\fP()، \fBWEXITSTATUS\fP()، وهكذا). .P لا تؤثر \fBsystem\fP() على حالة انتظار أي أطفال آخرين. .SH الأخطاء قد تفشل \fBsystem\fP() بأي من نفس الأخطاء مثل \fBfork\fP(2). .SH السمات للاطلاع على شرح للمصطلحات المستخدمة في هذا القسم، انظر \fBattributes\fP(7). .TS allbox; lbx lb lb l l l. الواجهة السمة القيمة T{ .na .nh \fBsystem\fP() T} سلامة الخيوط MT\-Safe .TE .SH المعايير C11, POSIX.1\-2008. .SH التاريخ POSIX.1\-2001، C89. .SH ملاحظات توفر \fBsystem\fP() البساطة والراحة: فهي تعالج جميع تفاصيل استدعاء \fBfork\fP(2) و \fBexecl\fP(3) و \fBwaitpid\fP(2)، بالإضافة إلى التلاعبات الضرورية بالإشارات؛ بالإضافة إلى ذلك، ينفذ الشل الاستبدالات المعتادة وإعادة توجيه الإدخال/الإخراج لـ \fIcommand\fP. التكلفة الرئيسية لـ \fBsystem\fP() هي عدم الكفاءة: استدعاءات نظام إضافية مطلوبة لإنشاء العملية التي تشغل الشل وتنفيذ الشل. .P إذا عُرفت كليّة اختبار الميزة \fB_XOPEN_SOURCE\fP (قبل تضمين \fIأي\fP ملفات رأس)، فتُتاح الكليّات الموصوفة في \fBwaitpid\fP(2) (\fBWEXITSTATUS\fP()، إلخ) عند تضمين \fI\fP. .P كما ذُكر، تتجاهل \fBsystem\fP() \fBSIGINT\fP و \fBSIGQUIT\fP. قد يجعل هذا البرامج التي تستدعيها من حلقة غير قابلة للمقاطعة، إلا إذا اهتمت بنفسها بفحص حالة خروج الطفل. على سبيل المثال: .P .in +4n .EX while (something) { int ret = system("foo"); \& if (WIFSIGNALED(ret) && (WTERMSIG(ret) == SIGINT || WTERMSIG(ret) == SIGQUIT)) break; } .EE .in .P وفقًا لـ POSIX.1، لم يُحدد ما إذا كانت المعالجات المسجلة باستخدام \fBpthread_atfork\fP(3) تُستدعى أثناء تنفيذ \fBsystem\fP(). في تطبيق glibc، لا تُستدعى هذه المعالجات. .P قبل glibc 2.1.3، لم يُجرَ التحقق من توفر \fI/bin/sh\fP فعليًا إذا كان \fIcommand\fP فارغًا؛ بل كان يُفترض دائمًا أنه متوفر، وكانت \fBsystem\fP() تُرجع 1 دائمًا في هذه الحالة. منذ glibc 2.1.3، يُجرى هذا التحقق لأنه، على الرغم من أن POSIX.1\-2001 يتطلب من التطبيق المطابق توفير غلاف، إلا أن هذا الغلاف قد لا يكون متوفرًا أو قابلًا للتنفيذ إذا كان البرنامج المُستدعي قد استدعى سابقًا \fBchroot\fP(2) (وهو غير محدد بواسطة POSIX.1\-2001). .P .\" من الممكن أن ينهي أمر الغلاف بحالة 127، مما يُنتج قيمة إرجاع من \fBsystem\fP() لا يمكن تمييزها عن الحالة التي لم يُنفذ فيها غلاف في العملية الابنة. .SS تحذيرات لا تستخدم \fBsystem\fP() من برنامج مُمتاز (برنامج set\-user\-ID أو set\-group\-ID، أو برنامج ذو صلاحيات) لأن القيم الغريبة لبعض متغيرات البيئة قد تُستخدم لتقويض سلامة النظام. على سبيل المثال، يمكن التلاعب بـ \fBPATH\fP لتنفيذ برنامج عشوائي بامتيازات. استخدم عائلة دوال \fBexec\fP(3) بدلاً من ذلك، ولكن ليس \fBexeclp\fP(3) أو \fBexecvp\fP(3) (والتي تستخدم أيضًا متغير البيئة \fBPATH\fP للبحث عن ملف قابل للتنفيذ). .P في الواقع، لن تعمل \fBsystem\fP() بشكل صحيح من البرامج ذات امتيازات set\-user\-ID أو set\-group\-ID على الأنظمة التي يكون فيها \fI/bin/sh\fP هو bash الإصدار 2: كإجراء أمني، يُسقط bash 2 الامتيازات عند بدء التشغيل. (يستخدم Debian غلافًا مختلفًا، \fBdash\fP(1)، والذي لا يفعل ذلك عند استدعائه كـ \fBsh\fP.) .P يجب تعقيم أي إدخال مستخدم يُستخدم كجزء من \fIcommand\fP بعناية، لضمان عدم تنفيذ أوامر غلاف أو خيارات أوامر غير متوقعة. هذه المخاطر خطيرة بشكل خاص عند استخدام \fBsystem\fP() من برنامج مُمتاز. .SH العلل .\" [BUG 211029](https://bugzilla.kernel.org/show_bug.cgi?id=211029) .\" [glibc bug](https://sourceware.org/bugzilla/show_bug.cgi?id=27143) .\" [POSIX bug](https://www.austingroupbugs.net/view.php?id=1440) إذا بدأ اسم الأمر بواصلة، يُفسر \fBsh\fP(1) اسم الأمر كخيار، ويكون السلوك غير محدد. (انظر الخيار \fB\-c\fP لـ \fBsh\fP(1).) لتجاوز هذه المشكلة، أسبق الأمر بمسافة كما في الاستدعاء التالي: .P .in +4n .EX system(" \-unfortunate\-command\-name"); .EE .in .SH "انظر أيضًا" \fBsh\fP(1), \fBexecve\fP(2), \fBfork\fP(2), \fBsigaction\fP(2), \fBsigprocmask\fP(2), \fBwait\fP(2), \fBexec\fP(3), \fBsignal\fP(7) .PP .SH ترجمة تُرجمت هذه الصفحة من الدليل بواسطة زايد السعيدي . .PP هذه الترجمة هي وثيقة مجانية؛ راجع .UR https://www.gnu.org/licenses/gpl-3.0.html رخصة جنو العامة الإصدار 3 .UE أو ما بعده للاطلاع على شروط حقوق النشر. لا توجد أي ضمانات. .PP إذا وجدت أي أخطاء في ترجمة صفحة الدليل هذه، يرجى إرسال بريد إلكتروني إلى قائمة بريد المترجمين: .MT kde-l10n-ar@kde.org .ME .