كيفية التأكد من أنه عندما تعمل عمليتي على ملف ، لا تحاول أي عملية أخرى الكتابة إليها أو حذفها؟

StackOverflow https://stackoverflow.com/questions/3890515

  •  28-09-2019
  •  | 
  •  

سؤال

إذا كانت عمليتي تحاول القراءة من ملف ، فكيف يمكنني التأكد من ذلك من الكود (لغة C) أنه لا توجد عملية أخرى تكتب إليها أو تحذفها (قم بتضمين أوامر النظام لحذف الملف)؟

أيضًا ، هل يمكن تحقيق ذلك على جميع نظام التشغيل (Windows ، Linux ، Solaris ، HP-UX ، VXWorks إلخ)؟

هل كانت مفيدة؟

المحلول

تحرير: سأجيب على UNIX/Linux

كما قال GSPR وآخرون ، ألق نظرة على قفل الملف باستخدام fcntl, flock, ، إلخ. ومع ذلك ، حذر من أن هذه هي قفل استشاري طُرق.

ماذا يعني هذا؟ هذا يعني أنه يمكنك تحذير العمليات الأخرى التي تقوم بها حاليًا بملف أو جزء منه ، ولكن لا يمكنك منعهم بالقوة من تجاهلك والكتابة في جميع أنحاء ملفك.

لا توجد بدايات قفل إلزامية. يمكنك استخدام الأذونات لصالحك ، ولكن لن يكون لديك أي ضمانات كاملة - يمكن للمستخدم الجذر دائمًا تجاوز حدودك. لا أعتقد أن هناك طريقة للتغلب على ذلك.

نصائح أخرى

لأنظمة Posix ، ألق نظرة على fcntl. flock يمكن أن تكون موضع اهتمام أيضًا ، على الرغم من أنني لا أعتقد أنها جزء من Posix.

يجب عليك فتح الملف مع قراءة أذونات المشاركة ، مما يعني أن أي شخص آخر يحاول فتحه يمكنه فقط الحصول على وصول القراءة. كما يقول pointy ، هذا هو نظام التشغيل الخاص وربما يتعين عليك ترميز هذا بشكل منفصل لنظام التشغيل Windows ، Linux ، إلخ. ومع ذلك ، فإن معظم OSS حديثة ينبغي دعم هذا.

انسخ الملف ، وقم بإجراء تغييراتك ، ثم أعد تسميته مرة أخرى على الأصل.

هناك طريقة أخرى ، إذا لم يكن الملف بعد ، هي إنشاء الملف باستخدام أعلام حصرية ، ثم حذفه من نظام الملفات. قم بتنفيذ كتابتك ، ثم قم بربطها بقوة مرة أخرى إلى نظام الملفات (موجود حاليًا فقط كإيقاع مفتوح). يمكنك الاستفادة من /proc لمسار المصدر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top