fswatch
عبارة عن أداة مراقبة لتغيير الملفات تتلقى إشعارات عند تعديل محتويات الملفات أو الأدلة المحددة. تطبق fswatch
عدة شاشات:
stat (2)
). يجب أن يبني fswatch
ويعمل بشكل صحيح على أي نظام يشحن أيًا من واجهات برمجة التطبيقات المذكورة أعلاه.
fswatch
هي الواجهة الأمامية لـ libfswatch
، وهي مكتبة تحتوي على روابط C وC++. يمكن العثور على مزيد من المعلومات حول libfswatch
هنا.
الميزات الرئيسية fswatch
هي:
تعتمد قيود fswatch
إلى حد كبير على الشاشة المستخدمة:
شاشة FSEvents ، المتوفرة فقط على نظام التشغيل macOS، ليس لها أي قيود معروفة، وتتناسب بشكل جيد مع عدد الملفات التي تتم مراقبتها.
لا توجد قيود معروفة على شاشة إعلام أحداث الملف ، المتوفرة على نواة Solaris ومشتقاتها.
تتطلب شاشة kqueue ، المتوفرة على أي نظام *BSD يتميز بـ kqueue، فتح واصف ملف لكل ملف تتم مشاهدته. ونتيجة لذلك، يتغير حجم هذه الشاشة بشكل سيئ مع عدد الملفات التي تتم مراقبتها، وقد تبدأ في التصرف بشكل سيء بمجرد نفاد واصفات الملفات من عملية fswatch
. في هذه الحالة، يقوم fswatch
بتفريغ خطأ واحد على خطأ قياسي لكل ملف لا يمكن فتحه.
قد تعاني شاشة inotify ، المتوفرة على Linux منذ kernel 2.6.13، من تجاوز قائمة الانتظار إذا تم إنشاء الأحداث بشكل أسرع من قراءتها من قائمة الانتظار. على أية حال، يتم ضمان تلقي التطبيق لإشعار تجاوز السعة والذي يمكن التعامل معه لاستعادته بأمان. يطرح fswatch
حاليًا استثناءً في حالة حدوث تجاوز لقائمة الانتظار. ستتعامل الإصدارات المستقبلية مع التجاوز عن طريق إصدار الإشعارات المناسبة.
يمكن لشاشة Windows إنشاء أدلة مراقبة فقط، وليس الملفات. لمشاهدة ملف، يجب مراقبة الدليل الأصلي الخاص به من أجل تلقي أحداث التغيير لجميع أبناء الدليل، بشكل متكرر بأي عمق. بشكل اختياري، يمكن تصفية أحداث التغيير لتشمل التغييرات التي تم إجراؤها على الملف المطلوب فقط.
تعتمد أداة مراقبة الاستطلاع ، المتوفرة على أي نظام أساسي، فقط على وحدة المعالجة المركزية والذاكرة المتوفرة لأداء مهمتها. يتدهور أداء هذه الشاشة خطيًا مع عدد الملفات التي تتم مشاهدتها.
توصيات الاستخدام هي كما يلي:
في نظام التشغيل macOS، استخدم شاشة FSEvents
فقط (وهو السلوك الافتراضي).
في Solaris ومشتقاته، استخدم شاشة إعلام أحداث الملف .
في Linux، استخدم شاشة inotify
(وهو السلوك الافتراضي).
إذا كان عدد الملفات المطلوب مراقبتها صغيرًا بدرجة كافية، فاستخدم شاشة kqueue
. انتبه إلى أنه في بعض الأنظمة، يتم تعيين الحد الأقصى لعدد واصفات الملفات التي يمكن فتحها بواسطة عملية ما على قيمة منخفضة جدًا (القيم المنخفضة التي تصل إلى 256 ليست غير شائعة)، حتى لو كان نظام التشغيل قد يسمح بقيمة أكبر بكثير. في هذه الحالة، تحقق من وثائق نظام التشغيل لديك لرفع هذا الحد إما على أساس كل عملية أو على مستوى النظام.
إذا كان ذلك ممكنا، شاهد الدلائل بدلا من الملفات. قد تؤدي صياغة الجانب المتلقي للأحداث بشكل صحيح للتعامل مع الدلائل إلى تقليل استهلاك موارد الشاشة بشكل معقول.
في نظام التشغيل Windows، استخدم شاشة windows
.
إذا لم ينطبق أي مما سبق، استخدم مراقب الاستطلاع. تشير تجربة المؤلفين إلى أن fswatch
يتطلب حوالي 150 ميجابايت من ذاكرة الوصول العشوائي (RAM) لمراقبة تسلسل هرمي مكون من 500.000 ملف بطول مسار لا يقل عن 32 حرفًا. أحد العوائق الشائعة لمراقبة الاستقصاء هو الوصول إلى القرص، نظرًا لأن stat()
- يمكن أن يستغرق عدد كبير من الملفات وقتًا طويلاً. في هذه الحالة، يجب تعيين زمن الوصول إلى قيمة كبيرة بما يكفي لتقليل تدهور الأداء الذي قد ينتج عن الوصول المتكرر إلى القرص.
قد يتمكن المستخدم العادي من جلب fswatch
من مدير الحزم لنظام التشغيل لديك أو من طرف ثالث. إذا كنت تبحث عن fswatch
لنظام التشغيل macOS، فيمكنك تثبيته باستخدام MacPorts أو Homebrew:
# MacPorts
$ port install fswatch
# Homebrew
$ brew install fswatch
على FreeBSD، يمكن تثبيت fswatch
باستخدام pkg:
# pkg install fswatch-mon
تحقق من مدير الحزم المفضل لديك وأخبرنا إذا كان fswatch
مفقودًا هناك.
يجب على المستخدم الذي يرغب في إنشاء fswatch
أن يحصل على إصدار tarball. يحتوي إصدار tarball على كل ما يحتاجه المستخدم لإنشاء fswatch
على نظامه، وذلك باتباع الإرشادات المفصلة في قسم التثبيت أدناه وملف INSTALL
.
يجب على المطور الذي يرغب في تعديل fswatch
الحصول على المصادر (إما من مصدر tarball أو استنساخ المستودع) وتثبيت نظام GNU Build System على أجهزته. يرجى قراءة README.gnu-build-system
للحصول على مزيد من التفاصيل حول كيفية تشغيل fswatch
من المصادر الموجودة على جهازك.
لا يُنصح بالحصول على نسخة من مستودع المصدر إلا إذا كنت مطورًا، وكان لديك نظام GNU Build System مثبتًا على جهازك، وتعرف كيفية تشغيله على المصادر.
راجع ملف INSTALL
للحصول على معلومات تفصيلية حول كيفية تكوين fswatch
وتثبيته. نظرًا لأن fswatch
ينشئ مكتبات ديناميكية ويستخدمها، فقد تحتاج في بعض الأنظمة الأساسية إلى تنفيذ مهام إضافية قبل أن تتمكن من استخدام fswatch
:
تأكد من تضمين دليل تثبيت المكتبات الديناميكية ( $PREFIX/lib
) في مسارات البحث الخاصة بالرابط الديناميكي لنظام التشغيل الخاص بك. المسار الافتراضي، /usr/local/lib
، سيعمل في كل أنظمة التشغيل تقريبًا.
قد يلزم تحديث الارتباطات وذاكرة التخزين المؤقت للمكتبات الديناميكية. في أنظمة GNU/Linux قد تحتاج إلى تشغيل ldconfig
:
$ ldconfig
fswatch
هو برنامج C++ ويتطلب تجميعه مترجم C++ متوافق مع معيار C++11. راجع وثائق نظام التشغيل لديك للحصول على معلومات حول كيفية تثبيت سلسلة أدوات C++ ووقت تشغيل C++.
لا توجد حزم برامج أو تبعيات أخرى مطلوبة لتكوين fswatch
وتثبيته، ولكن واجهات برمجة التطبيقات المذكورة أعلاه تستخدمها شاشات نظام الملفات.
يوفر fswatch
الوثائق التالية:
يتم توفير الوثائق الرسمية fswatch
بتنسيق Texinfo. هذا هو المصدر الأكثر شمولاً للمعلومات حول fswatch
والمصدر الوحيد المعتمد. صفحة الدليل، على وجه الخصوص، عبارة عن كعب روتين يقترح على المستخدم استخدام صفحة المعلومات بدلاً من ذلك.
إذا كنت تقوم بتثبيت fswatch
باستخدام مدير الحزم وترغب في تجميع دليل PDF في الحزمة، فيرجى إرسال طلب ميزة إلى مشرف الحزمة.
fswatch
قابل للترجمة ويستخدم GNU gettext
داخليًا لفصل السلسلة القابلة للترجمة عن ترجمتها. اللغات المتاحة حاليًا هي:
en
).it
).es
). لإنشاء fswatch
مع دعم الترجمة، يجب أن يكون لديك gettext
مثبتًا على نظامك. إذا لم يتمكن configure
من العثور على
أو لم يتمكن الرابط من العثور على libintl
، فقد تحتاج إلى توفير موقعه يدويًا configure
، عادةً باستخدام متغيرات CPPFLAGS
و LDFLAGS
. راجع README.macos
للحصول على مثال.
إذا لم يكن gettext
متاحًا على نظامك، فيجب أن يتم إنشاء fswatch
بشكل صحيح، لكنه سيفتقر إلى دعم الترجمة وستكون اللغة المحلية الوحيدة المتاحة هي الإنجليزية.
يقبل fswatch
قائمة بالمسارات التي ينبغي تلقي أحداث التغيير من أجلها:
$ fswatch [options] ... path-0 ... path-n
يتم إنشاء دفق الحدث حتى لو لم يكن أي من المسارات موجودًا بعد. إذا تم إنشاؤها بعد إطلاق fswatch
، فسيتم تلقي أحداث التغيير بشكل صحيح. اعتمادًا على المراقب المستخدم، ستتم مراقبة المسارات التي تم إنشاؤها حديثًا بعد انقضاء مقدار زمن الوصول الذي تم تكوينه.
يمكن إرسال مخرجات fswatch
إلى برنامج آخر لمعالجتها بشكل أكبر:
$ fswatch -0 path | while read -d "" event
do
// do something with ${event}
done
لتشغيل أمر عند طباعة مجموعة من أحداث التغيير على الإخراج القياسي ولكن لا توجد تفاصيل للحدث مطلوبة، فيمكن استخدام الأمر التالي:
$ fswatch -o path | xargs -n1 -I{} program
يتوافق السلوك مع الإصدارات السابقة من fswatch
(الإصدار 0.x). من فضلك، اقرأ قسم مشكلات التوافق مع fswatch v.0.x لمزيد من المعلومات.
افتراضيًا، تختار fswatch
أفضل شاشة متاحة على النظام الأساسي الحالي، من حيث الأداء واستهلاك الموارد. إذا كان المستخدم يرغب في تحديد شاشة مختلفة، فيمكن استخدام الخيار -m
لتحديد الشاشة بالاسم:
$ fswatch -m kqueue_monitor path
يمكن الحصول على قائمة الشاشات المتوفرة باستخدام الخيار -h
.
لمزيد من المعلومات، راجع وثائق fswatch
.
الجميع مدعوون للمساهمة في fswatch
. من فضلك، راجع CONTRIBUTING
لمزيد من المعلومات.
يمكن إرسال تقارير الأخطاء مباشرة إلى المؤلفين.
يمكن الاتصال بالمؤلف على IRC، باستخدام قناة Freenode #fswatch
.
هذا البرنامج مرخص بشكل مزدوج بموجب GPL v.3.0 وترخيص Apache v.2.0.
حقوق الطبع والنشر (ج) 2013-2021 إنريكو إم كريسوستومو
هذا البرنامج هو برنامج مجاني. يمكنك إعادة توزيعه و/أو تعديله بموجب شروط رخصة جنو العمومية كما نشرتها مؤسسة البرمجيات الحرة؛ إما الإصدار 3، أو (حسب اختيارك) أي إصدار لاحق.
يتم توزيع هذا البرنامج على أمل أن يكون مفيدًا، ولكن دون أي ضمان؛ دون حتى الضمان الضمني لقابلية التسويق أو الملاءمة لغرض معين. راجع رخصة جنو العامة لمزيد من التفاصيل.
ينبغي أن تكون قد حصلت على نسخة من رخصة جنو العامة مع هذا البرنامج. إذا لم يكن الأمر كذلك، راجع http://www.gnu.org/licenses/.