تقنية

S_IMODE في بايثون: هل يساوي القناع 0o777؟

الدالة تبقي بت S_ISUID
ناتج الدالة. [1] [2]

اختر القناع حسب البتات التي تريد الاحتفاظ بها. [1] [2]

الخلاصة السريعة

لا؛ S_IMODE يشمل البتات الخاصة أيضًا. [1] [2]

  • نركب عددًا من S_IFREG وS_ISUID و0o640. [1] [2]
  • الدالة تعيد 0o4640. [1] [2]
  • القناع 0o777 يعيد 0o640. [1] [2]
  • بت S_ISUID يفسر الفرق 0o4000. [1] [2]
  • اختبرنا 3.12.14 دون فحص ملف أو تعديل صلاحيات. [1] [2]

المثال

import stat as s
m=s.S_IFREG|s.S_ISUID|0o640
print(oct(s.S_IMODE(m)))
print(oct(m&0o777))

[1] [2]

ما الذي يبقى؟

المصدر هنا يطبق على العدد القناع 07777 في التعريف المقروء. المخرجان 0o4640 ثم 0o640. بتات النوع خارج الناتجين، لكن البت الخاص يبقى في الأول. البادئة 0o تعني العرض الثماني. [1] [2]

قناع 777 يحذف البت الخاص
ناتج القناع. [1] [2]

النطاق

يشمل تعريف الدالة بتات sticky وset-group-ID وset-user-ID على الأنظمة الداعمة. مثالنا حساب على عدد مؤلف؛ لا يثبت أثر هذه البتات في نظام الملفات أو إمكانية الوصول إلى ملف. [1] [2]

المراجع

  1. Python 3.12: S_IMODE
  2. CPython 3.12.14: _stat.c
  3. موضوع تك: لغة بايثون — مفردات
  4. موضوع تك: تطبيقات بايثون — مفردات

للتوسع: بحث عن لغات البرمجة

أُعدّ هذا المقال بمساعدة الذكاء الاصطناعي، وخضع لمراجعة ذاتية بالأداة نفسها. لا يُنسب إلى مراجع بشري أو خبير مستقل. منهجية المحتوى.