سؤال

أريد أن يتم إخطار الكود الخاص بي عند تعديل أي ملف تحت (إما مباشرة أو غير مباشر) دليل معين. من خلال "Modified" ، أعني أنني أريد أن يتم إخطار الكود الخاص بي عندما يتم تغيير محتويات الملف أو إعادة تسميته أو حذفه ؛ أو إذا تمت إضافة ملف جديد. لتطبيقي ، يمكن أن يكون هناك الآلاف من الملفات.

نظرت كصيدات ، لكن نظرة عامة على التكنولوجيا تقول جزئياً:

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

كما يقول:

API أحداث نظام الملفات غير مصممة أيضًا لمعرفة متى يتغير ملف معين. لمثل هذه الأغراض ، تكون آلية الكوكويز أكثر ملاءمة.

ومع ذلك ، من أجل استخدام Kqueue على ملف معين ، يتعين على المرء فتح الملف للحصول على واصف ملف. من غير العملي إدارة الآلاف من واصفات الملفات (وربما يتجاوز الحد الأقصى المسموح به لعدد واصفات الملف المفتوح على أي حال).

من الغريب ، تحت النوافذ ، يمكنني استخدام ReadDirectoryChangesW() الوظيفة ويفعل بالضبط ما أريد.

فكيف يمكن للمرء أن يفعل ما أريد تحت نظام التشغيل Mac OS X؟ أو سأل بطريقة أخرى: كيف يمكن للمرء أن يكتب ما يعادل ReadDirectoryChangesW() لنظام التشغيل Mac OS X في مساحة المستخدم (والقيام بذلك بكفاءة كبيرة)؟

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

المحلول

لم أجرب هذا بنفسي ، لكن يبدو أن Fsevents قادرة على تقديم إشعارات على مستوى الملفات اعتبارًا من 10.7 (الأسد). من عند وصف fseventstreamcreatflags:

kFSEventStreamCreateFlagFileEvents

طلب إشعارات على مستوى الملف. سيتلقى الدفق الخاص بك أحداثًا حول الملفات الفردية في التسلسل الهرمي الذي تشاهده بدلاً من تلقي إشعارات مستوى الدليل فقط. استخدم هذه العلم بعناية لأنها ستولد أحداثًا أكثر بكثير من بدونها.

متوفر في OS X V10.7 وبعد ذلك.

نصائح أخرى

تحرير: لم يتم التحقق منه ، لكن Konstantin يشير أدناه إلى أن عينة الكود هذه عفا عليها الزمن اعتبارًا من عام 2012.

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

من المحتمل أن تكون محقًا في أن محاولة التسجيل لعدد غير محدود من Kqueues من المحتمل أن تكون غير قابلة للتطبيق.

أقرب الأداة (التي أعرفها) التي تتناسب مع احتياجاتك على نظام التشغيل Mac OS X fslogger. راجع الرابط للحصول على وصف ، DMG ورمز المصدر:OsxBook - Fslogger

قد ترغب في التحقق man fs_usage, ، على الرغم من أنها ليست خاصة بالدليل وتتطلب امتيازات الجذر.

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