حالة السباق عند الاتصال fsdeleteobject
-
20-09-2019 - |
سؤال
لقد قمت بتنفيذ عملية "حفظ آمنة" التي تمر بشيء مثل هذا:
- حفظ بعض البيانات إلى ملف مؤقت
A
- نسخ محتويات
A
إلى الوجهة النهائيةB
- حذف
A
لدي حالة سباق في الخطوة 3 حيث تعود Mac OS X أحيانا مع الخطأ -47 (fBsyErr
) عند محاولة حذف الملف باستخدام FSDeleteObject
. وبعد أنا واثق تماما من أنني الوحيد الذي يعدل هذا الملف وشك في أن يقوم نظام التشغيل بعمل شيء (على سبيل المثال، مهام التخزين المؤقت للخلفية) في ذلك الوقت أحاول حذف الملف، مما يؤدي إلى الخطأ.
هذه قضية متقطعة: عادة FSDeleteObject
استدعاء يعمل بشكل جيد فقط. في تلك الحالات التي أحصل فيها على رمز الخطأ، أود حذف الملف بأمان "في وقت لاحق في الوقت المناسب" عندما يتم إنهاء نظام التشغيل عند اللعب به.
ما هو أفضل مسار للعمل في محاولة حذف هذا الملف المؤقت المزعج؟
المحلول
هنا ماذا يحدث:
- السبب الأكثر شيوعا لل
FSDeleteObject
فشل مؤقتا معfBsyErr
هو أن الأضواء في عملية فهرسة الملف. إذا قمت بتعديل ملف، فاقم بإغلاقه، ثم حاول على الفور حذفه باستخدامFSDeleteObject
, ، من الممكن تماما أن يكون مفهرس الأضواء مفتوحا وستحصل عليهfBsyErr
.- بعض ماسحات ضوئية لمكافحة الفيروسات ثالث يمكن أن تؤدي هذه المشكلة أيضا. عند إغلاق ملف معدلة، يبدأ الماسح الضوئي لمكافحة الفيروسات على الفور في التحقق من ذلك للفيروسات. إذا كان لا يزال يتحقق عند محاولة حذف الملف،
FSDeleteObject
سوف تفشل معfBsyErr
.
كل مشكلة لديها سلسلة من الحلول، الأفضل لكليهما هو استخدام unlink
لا تنتمي إلى StackOverflow