الفرق بين المراجعتين لصفحة: «Ruby/Kernel/syscall»

من موسوعة حسوب
< Ruby‏ | Kernel
أنشأ الصفحة ب'<noinclude>{{DISPLAYTITLE: التابع <code>syscall‎</code> الخاص بالصنف <code>Kernel</code> في روبي}}</noinclude> تصنيف: Ruby تصن...'
 
تدقيق
 
(مراجعة متوسطة واحدة بواسطة مستخدم واحد آخر غير معروضة)
سطر 3: سطر 3:
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Method]]
[[تصنيف: Ruby Kernel]]
[[تصنيف: Ruby Kernel]]
يستدعي التابع syscall دالة نظام التشغيل المحددة بواسطة num، ويعيد نتيجة الدالة، أو يطلق <code>SystemCallError</code> في حال الفشل.
يستدعي التابع <code>syscall</code> دالة نظام التشغيل المحددة بواسطة المعامل المُمرَّر إليه ويعيد نتيجة هذه الدالة أو يطلق الخطأ <code>[[Ruby/SystemCallError|SystemCallError]]</code> في حال فشل استدعائها.
وسائط الدالة يمكن أن توضع بعد num. يجب أن تكون تلك الوسائط إما كائنات <code>String</code> أو كائنات <code>Integer</code>. يُمرّر كائن <code>String</code> كمؤشر لتسلسل البايتات (byte sequence). يتم تمرير كائن <code>Integer</code> كعدد صحيح، والذي له نفس حجم بتات (bit size) المؤشر. يمكن تمرير حتى تسعة وسائط.
الدالة المُحددة بالوسيط num تتعلق بالنظام. في بعض أنظمة Unix، يمكن الحصول على الأعداد من ملف يدعى <code>syscall.h</code>.


الناتج:
وسائط الدالة المُستدعاة يمكن أن تمريرها إلى التابع بعد تمرير رقم تلك الدالة. يجب أن تكون تلك الوسائط إما سلاسل نصية أو أعدادًا صحيحةً. يُمرّر كائن من النوع <code>[[Ruby/String|String]]</code> كمؤشر (pointer) لتسلسل البايتات (byte sequence) بينما يمُرَّر كائن من النوع <code>[[Ruby/Integer|Integer]]</code> كعدد صحيح له نفس حجم بتات (bit size) المؤشر. الحد الأقصى للوسائط التي يمكن تمريرها هو '''تسعة'''.


استدعاء <code>syscall</code> في نظام ليس لديه أي طريقة لنظام دوال اعتباطي (arbitrary system function) سيفشل، وسيطلق الخطأ <code>NotImplementedError</code>.
الدالة المُحددة بالوسيط <code>num</code> تتعلق بنظام التشغيل. في بعض أنظمة يونكس، يمكن الحصول على أرقام الدوال من ملف يدعى <code>syscall.h</code>.
ملاحظة: على العموم، <code>syscall</code> غير آمنة وغير محمولة (unportable). لكن الأمر يعود إليك في النهاية. يفضل استخدام المكتبة DL إن كنت تريد برمجة آمنة وأكثر محمولية.
 
استدعاء <code>syscall</code> في نظام تشغيل غير مزود بنظام دوال اعتباطي (arbitrary system function) سيؤدي إلى الفشل وإطلاق الخطأ <code>[[Ruby/NotImplementedError|NotImplementedError]]</code>.
 
'''ملاحظة''': عمومًا، التابع <code>syscall</code> غير آمن وغير محمول (unportable). لذلك استخدمه بحذر. إن كنت تريد برمجة آمنة وأكثر محمولية، يفضل استخدام المكتبة ‎ (Fiddle) DL .
==البنية العامة==
==البنية العامة==
<syntaxhighlight lang="ruby">syscall(num [, args...])→ integer‎</syntaxhighlight>
<syntaxhighlight lang="ruby">syscall(num [, args...])→ integer‎</syntaxhighlight>
==المعاملات==
==المعاملات==
===<code>num‎</code>===
===<code>num‎</code>===
رقم الدالة المراد استدعاؤها.


===<code>args...‎</code>===
===<code>args...‎</code>===


 
الوسائط الممررة إلى الدالة المستدعاة.
==القيمة المُعادة==
==القيمة المعادة==
تعاد نتيجة الدالة ذات الرقم بعد استدعائها وتمرير الوسائط <code>args...</code> إليها.


==أمثلة==
==أمثلة==
مثال على استخدام التابع <code>syscall‎</code>:
مثال على استخدام التابع <code>syscall‎</code>:
<syntaxhighlight lang="ruby">syscall 4, 1, "hello\n", 6  # '4' is write(2) on our box‎</syntaxhighlight>
<syntaxhighlight lang="ruby">syscall 4, 1, "hello\n", 6  # '4' is write(2) on our box‎</syntaxhighlight>ناتج تنفيذ هذه الشيفرة هو:<syntaxhighlight lang="text">hello
</syntaxhighlight>
==انظر أيضا==
==انظر أيضا==
* التابع <code>[[Ruby/Kernel/sub|sub]]</code>: يكافئ التابع sub التعبير <code>$_.sub( args )</code> ، باستثناء أنه سيتم تحديث <code>$_</code> إذا حدث استبدال. متوفر فقط عند تحديد خيار سطر الأوامر -p/-n.
* التابع <code>[[Ruby/Kernel/system|system]]</code>: ينفذ التعليمة المعطاة في صدفة فرعية (subshell).
* التابع <code>[[Ruby/Kernel/system|system]]</code>: ينفذ التابع system الوسيط command… في صدفة فرعية (subshell).يأخذ command… أحد الأشكال التالية.


==مصادر==
==مصادر==
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-syscall قسم التابع syscall‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]
*[http://ruby-doc.org/core-2.5.1/Kernel.html#method-i-syscall قسم التابع syscall‎ في الصنف Kernel‎ في توثيق روبي الرسمي.]

المراجعة الحالية بتاريخ 05:25، 17 نوفمبر 2018

يستدعي التابع syscall دالة نظام التشغيل المحددة بواسطة المعامل المُمرَّر إليه ويعيد نتيجة هذه الدالة أو يطلق الخطأ SystemCallError في حال فشل استدعائها.

وسائط الدالة المُستدعاة يمكن أن تمريرها إلى التابع بعد تمرير رقم تلك الدالة. يجب أن تكون تلك الوسائط إما سلاسل نصية أو أعدادًا صحيحةً. يُمرّر كائن من النوع String كمؤشر (pointer) لتسلسل البايتات (byte sequence) بينما يمُرَّر كائن من النوع Integer كعدد صحيح له نفس حجم بتات (bit size) المؤشر. الحد الأقصى للوسائط التي يمكن تمريرها هو تسعة.

الدالة المُحددة بالوسيط num تتعلق بنظام التشغيل. في بعض أنظمة يونكس، يمكن الحصول على أرقام الدوال من ملف يدعى syscall.h.

استدعاء syscall في نظام تشغيل غير مزود بنظام دوال اعتباطي (arbitrary system function) سيؤدي إلى الفشل وإطلاق الخطأ NotImplementedError.

ملاحظة: عمومًا، التابع syscall غير آمن وغير محمول (unportable). لذلك استخدمه بحذر. إن كنت تريد برمجة آمنة وأكثر محمولية، يفضل استخدام المكتبة ‎ (Fiddle) DL .

البنية العامة

syscall(num [, args...]) integer

المعاملات

num‎

رقم الدالة المراد استدعاؤها.

args...‎

الوسائط الممررة إلى الدالة المستدعاة.

القيمة المعادة

تعاد نتيجة الدالة ذات الرقم بعد استدعائها وتمرير الوسائط args... إليها.

أمثلة

مثال على استخدام التابع syscall‎:

syscall 4, 1, "hello\n", 6   # '4' is write(2) on our box‎

ناتج تنفيذ هذه الشيفرة هو:

hello

انظر أيضا

  • التابع system: ينفذ التعليمة المعطاة في صدفة فرعية (subshell).

مصادر