قفل الملفات
قفل الملفات هو آلية تقيد الوصول إلى ملف كمبيوتر ، أو إلى منطقة من ملف، من خلال السماح لمستخدم واحد أو عملية واحدة فقط بتعديله أو حذفه في وقت محدد، ومنع قراءة الملف أثناء تعديله أو حذفه.
تُطبّق الأنظمة آلية القفل لمنع حدوث تحديثات متداخلة ، وهو مثال على حالة التزامن ، وذلك بفرض تسلسل عمليات التحديث إلى أي ملف مُحدد. يوضح المثال التالي مشكلة التحديث المتداخل:
- تقوم العملية (أ) بقراءة سجل العميل من ملف يحتوي على معلومات الحساب، بما في ذلك رصيد حساب العميل ورقم هاتفه.
- تقوم العملية "ب" الآن بقراءة نفس السجل من نفس الملف، لذا فهي تمتلك نسختها الخاصة.
- تقوم العملية (أ) بتغيير رصيد الحساب في نسختها من سجل العميل وتكتب السجل مرة أخرى إلى الملف.
- تقوم العملية "ب"، التي لا تزال تحتفظ بالقيمة الأصلية القديمة لرصيد الحساب في نسختها من سجل العميل، بتحديث رصيد الحساب وكتابة سجل العميل مرة أخرى إلى الملف.
- لقد قام البرنامج B الآن بكتابة قيمة رصيد الحساب القديمة إلى الملف، مما تسبب في فقدان التغييرات التي أجراها البرنامج A.
تدعم معظم أنظمة التشغيل مفهوم قفل السجلات ، ما يعني إمكانية قفل سجلات محددة داخل أي ملف، وبالتالي زيادة عدد عمليات التحديث المتزامنة . تستخدم صيانة قواعد البيانات قفل الملفات، حيث يمكنها تنظيم الوصول إلى الملف الفعلي بأكمله الذي يقوم عليه نظام قاعدة البيانات. ورغم أن هذا يمنع أي عملية أخرى من الوصول إلى الملف، إلا أنه قد يكون أكثر كفاءة من قفل أجزاء متعددة من الملف بشكل فردي، وذلك بتجنب عبء الحصول على كل قفل وتحريره.
قد يؤدي سوء استخدام أقفال الملفات، كأي قفل حاسوبي آخر، إلى ضعف الأداء أو إلى حالات تعطل النظام . وقد يشير قفل الملفات أيضاً إلى إجراءات أمان إضافية يطبقها مستخدم الحاسوب إما باستخدام أمان نظام التشغيل ويندوز، أو أذونات نظام الملفات NTFS، أو عن طريق تثبيت برنامج قفل ملفات تابع لجهة خارجية.
في الحواسيب المركزية
كانت شركة IBM رائدة في مجال قفل الملفات في عام 1963 لاستخدامها في أجهزة الكمبيوتر المركزية التي تعمل بنظام التشغيل OS/360 ، حيث أطلق عليها اسم "التحكم الحصري". [ 1 ]
في نظام التشغيل مايكروسوفت ويندوز
يستخدم نظام التشغيل مايكروسوفت ويندوز ثلاث آليات متميزة لإدارة الوصول إلى الملفات المشتركة:
- باستخدام عناصر التحكم في الوصول المشترك التي تسمح للتطبيقات بتحديد مشاركة الوصول إلى الملف بالكامل للقراءة أو الكتابة أو الحذف [ 2 ]
- استخدام أقفال نطاق البايت للتحكيم في الوصول للقراءة والكتابة إلى المناطق داخل ملف واحد [ 3 ]
- عن طريق أنظمة ملفات ويندوز التي تمنع فتح الملفات التنفيذية للكتابة أو الحذف
يرث نظام ويندوز دلالات عناصر التحكم في الوصول للمشاركة من نظام MS-DOS ، حيث تم تقديم المشاركة في MS-DOS 3.3 . وبالتالي، يجب على التطبيق السماح صراحةً بالمشاركة عند فتح ملف؛ وإلا فإنه يتمتع بصلاحيات حصرية للقراءة والكتابة والحذف على الملف حتى إغلاقه (مع السماح بأنواع أخرى من الوصول، مثل تلك اللازمة لاسترداد خصائص الملف).
بالنسبة للملفات المفتوحة بصلاحيات وصول مشتركة، قد تستخدم التطبيقات قفل نطاق البايت للتحكم في الوصول إلى مناطق محددة من الملف. يحدد هذا القفل منطقة من الملف (الإزاحة والطول) ونوع القفل (مشترك أو حصري). تجدر الإشارة إلى أن المنطقة المراد قفلها من الملف لا يشترط أن تحتوي على بيانات، وقد تستغل التطبيقات هذه الخاصية أحيانًا لتنفيذ وظائفها.
بالنسبة للتطبيقات التي تستخدم واجهات برمجة تطبيقات قراءة/كتابة الملفات في نظام ويندوز، تُفرض أقفال نطاق البايت (وتُعرف أيضًا بالأقفال الإلزامية ) بواسطة أنظمة الملفات التي تعمل ضمن ويندوز. أما بالنسبة للتطبيقات التي تستخدم واجهات برمجة تطبيقات تعيين الملفات في ويندوز، فلا تُفرض أقفال نطاق البايت (وتُعرف أيضًا بالأقفال الاستشارية ). قد يكون لقفل نطاق البايت آثار جانبية أخرى على نظام ويندوز. على سبيل المثال، عادةً ما تُعطّل آلية مشاركة الملفات في ويندوز التخزين المؤقت للملف من جانب العميل لجميع العملاء عند استخدام أي عميل لأقفال نطاق البايت . سيلاحظ العميل بطئًا في الوصول لأن عمليات القراءة والكتابة يجب إرسالها إلى الخادم حيث يُخزّن الملف.
قد يؤدي سوء معالجة الأخطاء في برنامج تطبيقي إلى قفل ملف (إما باستخدام الوصول المشترك أو قفل الملفات على مستوى نطاق البايتات) بحيث يتعذر على التطبيقات الأخرى الوصول إليه. في هذه الحالة، قد يتمكن المستخدم من استعادة الوصول إلى الملف عن طريق إنهاء البرنامج المعطل يدويًا، ويتم ذلك عادةً من خلال أداة إدارة المهام .
يُحدد مُعامل وضع المشاركة (dwShareMode) في الدالة CreateFile[ 2 ] (المستخدمة لفتح الملفات) آلية مشاركة الملف. يُمكن تحديد وضع المشاركة للسماح بمشاركة الملف للقراءة أو الكتابة أو الحذف، أو أي مزيج منها. يجب أن تكون محاولات فتح الملف اللاحقة متوافقة مع جميع صلاحيات المشاركة الممنوحة سابقًا. عند إغلاق الملف، تُعدّل قيود المشاركة لإزالة القيود المفروضة عند فتح الملف.
يُحدد نوع قفل نطاق البايت بواسطة dwFlagsالمعامل الموجود في الدالة LockFileEx[ 4 ] المستخدمة لقفل منطقة من الملف. كما يمكن استخدام دالة واجهة برمجة تطبيقات ويندوز LockFile[ 5 ] التي تُتيح الحصول على قفل حصري على منطقة الملف.
أي ملف يحتوي على برنامج تنفيذي قيد التشغيل حاليًا على نظام الحاسوب (مثل ملف .org EXEأو COM.org DLLأو أي صيغة ملفCPL برنامج ثنائية أخرى ) يكون عادةً مقفلًا بواسطة نظام التشغيل نفسه، مما يمنع أي تطبيق من تعديله أو حذفه. أي محاولة للقيام بذلك ستُرفض برسالة خطأ تتعلق بانتهاك المشاركة، على الرغم من أن ملف البرنامج غير مفتوح بواسطة أي تطبيق. مع ذلك، لا يزال الوصول إليه مسموحًا به جزئيًا. على سبيل المثال، يمكن إعادة تسمية ملف تطبيق قيد التشغيل أو نسخه (قراءته) حتى أثناء تنفيذه.
تستخدم التطبيقات في نظام ويندوز مؤشرات الملفات للوصول إلى الملفات . ويمكن استعراض هذه المؤشرات باستخدام أداة مستكشف العمليات . كما يمكن استخدام هذه الأداة لإغلاق المؤشرات قسرًا دون الحاجة إلى إنهاء التطبيق الذي يستخدمها. قد يؤدي ذلك إلى سلوك غير متوقع ، حيث سيتلقى البرنامج خطأً غير متوقع عند استخدام المؤشر المغلق قسرًا، وقد يعمل البرنامج على ملف غير متوقع نظرًا لاحتمالية إعادة استخدام رقم المؤشر.
أضافت إصدارات مايكروسوفت ويندوز إكس بي وسيرفر 2003 ميزة اللقطات المحفوظة لوحدة التخزين ( Volume SnapshotVSS ) إلى نظام الملفات NTFS ، مما يسمح لبرامج النسخ الاحتياطي بالوصول إلى الملفات المفتوحة بغض النظر عن أي أقفال حصرية. مع ذلك، ما لم يُعاد كتابة البرنامج خصيصًا لدعم هذه الميزة، ستكون اللقطة متسقة مع حالة التعطل فقط، بينما يمكن للتطبيقات المدعومة بشكل صحيح مساعدة نظام التشغيل في إنشاء لقطات متسقة مع المعاملات. تتضمن البرامج التجارية الأخرى للوصول إلى الملفات المقفلة في ويندوز برنامج إدارة الوصول إلى الملفات (File Access Manager ) وبرنامج إدارة الملفات المفتوحة (Open File Manager ). تعمل هذه البرامج عن طريق تثبيت برامج التشغيل الخاصة بها للوصول إلى الملفات في وضع النواة (kernel mode) .
في الأنظمة الشبيهة بنظام يونكس
لا تقوم أنظمة التشغيل الشبيهة بنظام يونكس (بما في ذلك لينكس ونظام macOS من آبل ) عادةً بقفل الملفات المفتوحة تلقائيًا. تتوفر عدة أنواع من آليات قفل الملفات في مختلف إصدارات يونكس، وتدعم العديد من أنظمة التشغيل أكثر من نوع واحد لتحقيق التوافق. الآلية الأكثر شيوعًا هي . هناك آليتان أخريان هما و ، ويمكن تنفيذ كل منهما فوق fcntlأو بشكل منفصل عن fcntl. على الرغم من إمكانية ضبط بعض أنواع الأقفال لتكون إلزامية، إلا أن أقفال الملفات في يونكس تكون افتراضيًا استشارية . هذا يعني أن العمليات المتعاونة قد تستخدم الأقفال لتنسيق الوصول إلى الملف فيما بينها، ولكن العمليات غير المتعاونة حرة أيضًا في تجاهل الأقفال والوصول إلى الملف بأي طريقة تختارها. بعبارة أخرى، تمنع أقفال الملفات عمليات قفل الملفات الأخرى فقط، وليس عمليات الإدخال/الإخراج.
يُقدَّم نوعان من الأقفال: الأقفال المشتركة والأقفال الحصرية. في حالة fcntl، يمكن تطبيق أنواع مختلفة من الأقفال على أقسام مختلفة (نطاقات بايت) من الملف، أو على الملف بأكمله. يمكن لعدة عمليات الاحتفاظ بالأقفال المشتركة في الوقت نفسه، بينما لا يمكن الاحتفاظ بالقفل الحصري إلا بواسطة عملية واحدة، ولا يمكن أن يتعايش مع القفل المشترك. للحصول على قفل مشترك، يجب على العملية الانتظار حتى لا تحتفظ أي عملية بأي أقفال حصرية. للحصول على قفل حصري، يجب على العملية الانتظار حتى لا تحتفظ أي عملية بأي نوع من الأقفال. على عكس الأقفال التي تُنشئها fcntl، فإن تلك التي تُنشئها flockتُحفظ عبر fork، مما يجعلها مفيدة في إنشاء خوادم متفرعة. لذلك، من الممكن لأكثر من عملية واحدة الاحتفاظ بقفل حصري على الملف نفسه، بشرط أن تشترك هذه العمليات في علاقة فرعية وأن يكون القفل الحصري قد أُنشئ في البداية في عملية واحدة قبل تكراره عبر fork.
تُسمى الأقفال المشتركة أحيانًا "أقفال القراءة"، وتُسمى الأقفال الحصرية أحيانًا "أقفال الكتابة". مع ذلك، ولأن الأقفال في أنظمة يونكس استشارية، فلا يُفرض هذا التصنيف. لذا، من الممكن أن تتضمن قاعدة البيانات مفهوم "الكتابة المشتركة" مقابل "الكتابة الحصرية"؛ فعلى سبيل المثال، قد يُسمح بتغيير حقل في مكانه ضمن الوصول المشترك، بينما قد يتطلب جمع البيانات المهملة وإعادة كتابة قاعدة البيانات وصولًا حصريًا.
تُطبَّق أقفال الملفات على الملف نفسه، وليس على اسمه. وهذا أمرٌ بالغ الأهمية لأن نظام يونكس يسمح بأسماء متعددة للإشارة إلى الملف نفسه. وبالإضافة إلى القفل غير الإلزامي، يُتيح ذلك مرونةً كبيرةً في الوصول إلى الملفات من عمليات متعددة. من ناحية أخرى، قد يُؤدي أسلوب القفل التعاوني إلى مشاكل عندما تكتب عمليةٌ ما إلى ملف دون الالتزام بأقفال الملفات التي وضعتها عمليات أخرى.
لهذا السبب، توفر بعض أنظمة التشغيل الشبيهة بنظام يونكس دعمًا محدودًا للقفل الإلزامي . [ 6 ] في هذه الأنظمة، يخضع الملف الذي setgidيكون بتّه مُفعّلاً ولكن بتّ تنفيذ المجموعة الخاص به مُعطّلاً عند فتحه للقفل الإلزامي التلقائي إذا كان نظام الملفات الأساسي يدعمه. مع ذلك، تميل أقسام NFS غير المحلية إلى تجاهل هذا البتّ. [ 7 ] إذا كان الملف خاضعًا للقفل الإلزامي، فإن محاولات القراءة من منطقة مقفلة بقفل حصري، أو الكتابة إلى منطقة مقفلة بقفل مشترك أو حصري، ستُحظر حتى يتم تحرير القفل. نشأت هذه الاستراتيجية لأول مرة في نظام System V، ويمكن رؤيتها اليوم في أنظمة التشغيل Solaris و HP-UX وLinux. مع ذلك، فهي ليست جزءًا من معيار POSIX، ولا تدعمها أنظمة التشغيل المشتقة من BSD مثل FreeBSD و OpenBSD و NetBSD و macOS من Apple. [ 8 ] يدعم Linux أيضًا القفل الإلزامي-o mand من خلال المعامل الخاص بتركيب نظام الملفات ( )، ولكن نادرًا ما يُستخدم.
تمنع بعض أنظمة التشغيل الشبيهة بنظام يونكس محاولات فتح الملف القابل للتنفيذ لبرنامج قيد التشغيل للكتابة؛ وهذا شكل ثالث من أشكال القفل، منفصل عن تلك التي توفرها أنظمة التشغيل fcntlالأخرى flock.
مشاكل
يمكن لأكثر من عملية واحدة الاحتفاظ بحق flockالوصول الحصري إلى ملف معين إذا تم تكرار هذا الحق في عملية لاحقة fork. هذا يُبسط عملية البرمجة لخوادم الشبكة ويساعد على منع حدوث حالات التزامن، ولكنه قد يكون مُربكًا لمن ليس لديه خبرة كافية.
لا تؤثر الأقفال الإلزامية على [البرنامج/المكتبة] unlink. وبالتالي، قد تتمكن بعض البرامج من التحايل على الأقفال الإلزامية. وقد لاحظ ستيفنز وراغو (2005) أن edالمحرر فعل ذلك بالفعل. [ 9 ]
يعتمد flockعمل الأقفال على أنظمة ملفات الشبكة، مثل NFS ، وكيفية عملها ، على التنفيذ. في أنظمة BSDflock ، تُعتبر استدعاءات مُعرّف ملف مفتوح لملف على قسم مُثبّت عبر NFS عمليات ناجحة لا تُحدث أي تغيير . في أنظمة Linux قبل الإصدار 2.6.12، flockكانت استدعاءات ملفات NFS تعمل محليًا فقط. تُنفّذ نواة النظام 2.6.12 والإصدارات الأحدث flockاستدعاءات ملفات NFS باستخدام أقفال نطاق البايت POSIX. ستكون هذه الأقفال مرئية لعملاء NFS الآخرين الذين يُنفّذون أقفال POSIXfcntl من هذا النوع ، ولكنها ستكون غير مرئية للعملاء الذين لا يُنفّذونها. [ 10 ]
تؤدي ترقيات وتخفيضات مستوى القفل إلى تحرير القفل القديم قبل تطبيق القفل الجديد. إذا قام تطبيق ما بتخفيض مستوى قفل حصري إلى قفل مشترك بينما ينتظر تطبيق آخر قفلًا حصريًا، فقد يحصل التطبيق الأخير على القفل الحصري ويمنع التطبيق الأول من الوصول. هذا يعني أن تخفيضات مستوى القفل قد تؤدي إلى حظر، وهو ما قد يبدو غير منطقي.
تُزال جميعfcntl الأقفال المرتبطة بملفٍ ما لعمليةٍ معينة عند إغلاق أيfcntl مُعرِّف ملفٍ لهذا الملف بواسطة تلك العملية، حتى لو لم يُطلب قفلٌ لهذا المُعرِّف مُطلقًا. كما أن الأقفال لا تُورَث إلى العمليات الفرعية. fcntlتُشكِّل دلالات الإغلاق هذه مشكلةً خاصةً للتطبيقات التي تستدعي مكتبات الإجراءات الفرعية التي قد تصل إلى الملفات. لا تحدث أيٌّ من هاتين المشكلتين عند استخدام flockالأقفال الحقيقية.
يعتمد الحفاظ على حالة القفل على واصفات الملفات المفتوحة التي يتم تمريرها إلى عملية أخرى باستخدام مقبس نطاق Unix على التنفيذ.
مشاكل الإدخال/الإخراج المخزن مؤقتًا
يحدث أحد أسباب فشل القفل عندما تُخصص مخازن الإدخال/الإخراج المخزنة مؤقتًا في مساحة عمل المستخدم المحلية، بدلاً من مجمع مخازن نظام التشغيل. تُستخدم freadهذه fwriteالمخازن عادةً لإجراء عمليات الإدخال/الإخراج المخزنة مؤقتًا، وبمجرد قراءة جزء من ملف، فإن محاولة قراءة نفس الجزء ستؤدي على الأرجح إلى الحصول على البيانات من المخزن المحلي. تكمن المشكلة في أن مستخدمًا آخر متصلًا بنفس الملف لديه مخازن محلية خاصة به، ويحدث الشيء نفسه معه. لن تحصل عملية قراءة fwriteالبيانات من المخزن على البيانات من الملف نفسه، وقد يكون مستخدم آخر قد عدّلها. يمكن لكلا المستخدمين استخدام ` request` لضمان الوصول الحصري، مما يمنع الكتابة المتزامنة، ولكن نظرًا لأن عمليات القراءة تتم من المخزن وليس من الملف نفسه، فإن أي بيانات عدّلها المستخدم الأول قد يفقدها المستخدم الثاني (تُستبدل بالبيانات الأصلية). الحل الأمثل لهذه المشكلة هو استخدام الإدخال/الإخراج غير المخزن مؤقتًا (`request` و`request` ) مع `request` ، مما يعني أيضًا استخدام `request` بدلاً من `request` و`request` . بالطبع، سيتعين عليك إجراء تعديلات على معلمات الدالة والنتائج المُعادة. بشكل عام، تعتبر عمليات الإدخال/الإخراج المخزنة مؤقتًا غير آمنة عند استخدامها مع الملفات المشتركة.freadflock readwriteflocklseekfseekftell
في نظام التشغيل AmigaOS
في نظام AmigaOS ، يُمكن الحصول على قفل لملف (أو مجلد) باستخدام الدالة Lock(في ملف dos.library.). يُمكن أن يكون القفل مشتركًا (بحيث تستطيع العمليات الأخرى قراءة الملف/المجلد، ولكن لا يُمكنها تعديله أو حذفه)، أو حصريًا بحيث لا يُمكن الوصول إلى الكائن أو تعديله إلا من قِبل العملية التي تحصل على القفل بنجاح. يكون القفل على الكائن بأكمله وليس على جزء منه. يجب تحرير القفل باستخدام الدالة UnLock: على عكس نظام Unix، لا يقوم نظام التشغيل بإلغاء قفل الكائن تلقائيًا عند انتهاء العملية.
ملفات القفل
تستخدم البرامج النصية البرمجية وغيرها من البرامج غالبًا استراتيجية مشابهة لاستخدام قفل الملفات: إنشاء ملفات القفل ، وهي ملفات لا يهم محتواها (مع أنه غالبًا ما يُعثر على مُعرّف العملية التي تحمل القفل في الملف)، وغرضها الوحيد هو الإشارة بوجود مورد ما مقفل. يُعد ملف القفل الخيار الأمثل في حال لم يكن المورد المراد التحكم به ملفًا عاديًا، وبالتالي لا تنطبق عليه طرق قفل الملفات. على سبيل المثال، قد يتحكم ملف القفل في الوصول إلى مجموعة من الموارد ذات الصلة، مثل عدة ملفات أو مجلدات أو مجموعة من أقسام القرص ، أو الوصول المُحدد إلى بروتوكولات ذات مستوى أعلى مثل الخوادم أو اتصالات قواعد البيانات.
عند استخدام ملفات القفل، يجب الحرص على ضمان أن تكون العمليات ذرية . للحصول على قفل، يجب على العملية التحقق من عدم وجود ملف القفل ثم إنشائه، مع منع أي عملية أخرى من إنشائه في هذه الأثناء. تتضمن الطرق المختلفة لتحقيق ذلك ما يلي:
- باستخدام
lockfileالأمر (أداة إنشاء ملفات الإشارات المشروطة الموزعة فيprocmailالحزمة). - واجهات برمجة التطبيقات التي تُنشئ ملفًا، ولكنها تفشل إذا كان الملف موجودًا بالفعل. (تتوفر واجهات برمجة التطبيقات هذه من لغات مثل C أو C++، ويمكن لبرامج shell النصية استخدام noclobber )
- استخدام
mkdirالأمر والتحقق من رمز الخروج للفشل [ 11 ]
تُسمى ملفات القفل عادةً بعلامة المد (~ ~) مسبوقة باسم الملف الذي تقوم بقفله، أو بنسخة مكررة من اسم الملف الكامل متبوعة بعلامة المد .LCK . أما إذا كانت تقفل مورداً آخر غير ملف، فقد تُسمى بأسماء أكثر عشوائية.
برنامج فك القفل
أداة فك القفل هي أداة مساعدة تُستخدم لتحديد العملية التي تُقفل ملفًا، وتعرض قائمة بالعمليات وخيارات للتعامل معها (مثل إنهاء المهمة، أو فك القفل، إلخ)، بالإضافة إلى قائمة بخيارات الملف مثل الحذف أو إعادة التسمية. تهدف هذه الأداة إلى إزالة أقفال الملفات غير الصحيحة أو القديمة، والتي غالبًا ما تنشأ عن حالات شاذة، مثل تعطل العمليات أو توقفها، مما يؤدي إلى أقفال ملفات تستمر حتى بعد توقف العملية المالكة لها. في بعض الأنظمة الشبيهة بنظام يونكس، يمكن استخدام أدوات مثل `unlocker` fstatو`unlocker` lockfلفحص حالة أقفال الملفات حسب العملية، أو اسم الملف، أو كليهما.
في أنظمة ويندوز، إذا كان الملف مقفلاً، فمن الممكن جدولة نقله أو حذفه ليتم تنفيذه عند إعادة تشغيل النظام التالية. عادةً ما تستخدم برامج التثبيت هذه الطريقة لاستبدال ملفات النظام المقفلة.
أنظمة التحكم في الإصدارات
في أنظمة التحكم في الإصدارات، يُستخدم قفل الملفات لمنع مستخدمين من تعديل نفس إصدار الملف بالتوازي، وبالتالي منع المستخدم الثاني من الكتابة فوق ما عدّله المستخدم الأول عند الحفظ. ويتم ذلك عن طريق وضع علامة "للقراءة فقط" على الملفات المقفلة في نظام الملفات. يقوم المستخدم الراغب في تعديل الملف بعملية إلغاء القفل (وتُسمى أيضًا "السحب")، ولا يُسمح لأي مستخدم آخر بإلغاء قفل الملف حتى تتم عملية "الإيداع" (التخزين)، أو حتى يتم إلغاء القفل.
برمجة
يدعم Rust قفل الملفات باستخدام الطرق التالية lock: try_lockو lock_sharedو try_lock_sharedو unlock. [ 12 ]
استخدم std :: fs :: File ؛fn main () -> std :: io :: Result < () > { let f = File :: create ( "foo.txt" ) ? ; f . lock () ? ; Ok (()) }يدعم .NET قفل الملفات باستخدام FileStream. [ 13 ]
باستخدام System.IO ؛var textLength = 1 ; var byteCount = 1 ;باستخدام var stream = new FileStream ( "foo.txt" , FileMode . OpenOrCreate ); stream . Lock ( textLength - 1 , byteCount );يدعم PHP قفل الملفات باستخدام flockالدالة. [ 14 ]
$fp = fopen ( "/tmp/lock.txt" , "r+" );إذا كان ( flock ( $fp , LOCK_EX )) { // الحصول على قفل حصري ftruncate ( $fp , 0 ); // اقتطاع الملف fwrite ( $fp , "اكتب شيئًا هنا \n " ); fflush ( $fp ); // مسح المخرجات قبل تحرير القفل flock ( $fp , LOCK_UN ); // تحرير القفل } else { echo "تعذر الحصول على القفل!" ; }fclose ( $fp );انظر أيضاً
مراجع
- ↑ نظام التشغيل IBM System/360: مرجع لغة التحكم في المهام (ملف PDF) . IBM . يونيو 1971. الصفحات 162-164 . GC28-6704-1.
- 1 2 " وظيفة" . مجموعة أدوات تطوير برامج ويندوز. وثائق مايكروسوفت . windows-sdk-content. شركة مايكروسوفت . تم الاسترجاع في 7 نوفمبر 2018 .
CreateFileW - ↑ " دالة" . مجموعة أدوات تطوير برامج ويندوز. وثائق مايكروسوفت . windows-sdk-content. شركة مايكروسوفت . تم الاسترجاع في 7 نوفمبر 2018 .
LockFileEx - ↑ " دالة" . مجموعة أدوات تطوير برامج ويندوز. وثائق مايكروسوفت . windows-sdk-content. شركة مايكروسوفت . تم الاسترجاع في 5 يوليو 2020 .
LockFileEx - ↑ " دالة" . مجموعة أدوات تطوير برامج ويندوز. وثائق مايكروسوفت . windows-sdk-content. شركة مايكروسوفت . تم الاسترجاع في 5 يوليو 2020 .
LockFile - ↑ "قفل الملفات الإلزامي لنظام التشغيل لينكس" . kernel.org . الوثائق / أنظمة الملفات . تم الاطلاع عليه بتاريخ 2011-10-08 .
- ↑ "استخدام و و Sticky Bits مع الخادم لـ NFS" . cc731734(WS.10) . تم الاطلاع عليه بتاريخ 2011-10-08 .
SetuidSetgid - ↑ فيغا، جون؛ ميسييه، مات (2003). "2.8 تأمين الملفات". كتاب الطبخ للبرمجة الآمنة للغة C و C++ ( الطبعة الأولى). ساباستوبول، كاليفورنيا: أورايلي ميديا. ص 792. ISBN 978-0-596-00394-4
يختلف دعم الأقفال الإلزامية اختلافًا كبيرًا بين توزيعات يونكس المختلفة. يدعم كل من لينكس وسولاريس الأقفال الإلزامية، بينما لا يدعمها
داروين
،
وفري بي إس دي
،
ونت بي إس دي
،وأوبن
بي إس دي
، على الرغم من أنها تستخدم الواجهة التي يستخدمها لينكس وسولاريس لدعمها. في هذه الأنظمة، تُنشئ هذه الواجهة أقفالًا استشارية. ولا يمتد دعم الأقفال الإلزامية إلى نظام ملفات الشبكة (NFS).
- ↑ ستيفنز، دبليو. ريتشارد؛ راغو، ستيفن أ. (27 يونيو 2005). البرمجة المتقدمة في بيئة يونكس ( الطبعة الثانية). أديسون-ويسلي بروفيشنال. ص 456. ISBN 978-0201433074.
- ↑ "رسائل الخطأ الشائعة" . nfs.sourceforge.net . الأسئلة الشائعة حول نظام ملفات الشبكة (NFS) في لينكس: د. سورس فورج.
- ↑ "قفل البرنامج النصي (ضد التشغيل المتوازي)" . مؤرشف من الأصل في 1 أغسطس 2010.
- ↑ "ملف في std::fs - Rust" . doc.rust-lang.org . تم الاطلاع عليه بتاريخ 26 أكتوبر 2025 .
- ↑ "FileStream.Lock(Int64, Int64) Method (System.IO)" . learn.microsoft.com . تم الاطلاع عليه بتاريخ 26 أكتوبر 2025 .
- ↑ "PHP: flock - Manual" . www.php.net . تم الاطلاع عليه بتاريخ 26 أكتوبر 2025 .
روابط خارجية
- كل ما لم ترغب بمعرفته عن قفل الملفات ، مراجعة لخيارات قفل الملفات في نظام يونكس ومشاكلها (بتاريخ 13 ديسمبر 2010)
- أقفال POSIX الخاصة بالملفات ، مقال من LWN.net حول أقفال الملفات المدعومة على Linux والتي تختلف في سلوكها عن أقفال POSIX فيما يتعلق بالوراثة والسلوك عند الإغلاق
- أنظمة ملفات الحاسوب
