একটি ext3 fs- র নিয়মিত ফাইলের মাধ্যমে যোগাযোগ করে দুটি প্রক্রিয়া, একজন পাঠক এবং লেখক কল্পনা করুন। পাঠকের ফাইলটিতে একটি ইনোটিফাই IN_MODIFY
ওয়াচ রয়েছে। লেখক একক write()
কলটিতে ফাইলটিতে 1000 বাইট লেখেন । পাঠক ইনোটিফাই ইভেন্ট পান এবং ফাইলটিতে কল fstat
করে। পাঠক কী দেখেন?
রিডার
st_size
ফাইলটিতে অন্তত 1000 ফিরিয়ে নেবে এমন কোনও গ্যারান্টি আছে কি ? আমার পরীক্ষাগুলি থেকে, মনে হয় না।রিডার আসলে
read()
1000 বাইট করতে পারে এমন কোন গ্যারান্টি আছে ?
এটি গুরুতরভাবে I / O বাউন্ড বাক্সে ঘটছে। উদাহরণস্বরূপ, sar
প্রায় 1 সেকেন্ডের জন্য অপেক্ষা করা সময়গুলি দেখায়। আমার ক্ষেত্রে পাঠক কল করার আগে ইনোটিফাই ইভেন্টটি stat
পাওয়া এবং খুব ছোট ফলাফল পাওয়ার পরে 10 সেকেন্ডের জন্য অপেক্ষা করছে ।
আমি যা আশা করেছিলাম তা ছিল ফাইল প্রস্তুত না হওয়া পর্যন্ত inotif ইভেন্ট বিতরণ করা হবে না। আমার সন্দেহজনকভাবে ঘটছে যা হ'ল write()
রাইটারে কল করার সময় ইনোটিফাই ইভেন্টটি আগুন জ্বলে ওঠে এবং যখনই এটি প্রস্তুত হওয়ার ঘটনা ঘটে তখন সিস্টেমটি অন্যান্য প্রসেসের কাছে ডেটা প্রকৃতপক্ষে পাওয়া যায়। এই ক্ষেত্রে, 10 সেকেন্ড পর্যাপ্ত সময় নয়।
আমি অনুমান করি যে আমি কেবলমাত্র নিশ্চিতকরণটি খুঁজছি যে কর্নেলটি বাস্তবে আমার অনুমানের মাধ্যমে কার্যকরভাবে প্রয়োগ করে। এছাড়াও, যদি কোনও বিকল্প থাকে, সম্ভবত, এই আচরণটি পরিবর্তন করতে?
অবশেষে - এই আচরণটি দেওয়া, inotify এর বিন্দুটি কী? আপনি তথ্যটি উপলব্ধ না হওয়া অবধি ইভেন্টটি পাওয়ার পরেও ফাইল / ডিরেক্টরিটি পোলিংয়ে আপনি কমিয়ে দিয়েছেন। পাশাপাশি এটি করাও যেতে পারে এবং inotify সম্পর্কে ভুলে যান।
*** সম্পাদনা ** * * ঠিক আছে, প্রায়শই ঘটে যায়, আমি যে আচরণটি দেখছি তা বাস্তবে অর্থবোধ করে, এখন আমি বুঝতে পারি যে আমি আসলে কী করছি। ^: _ ^
ফাইলটি যে ডিরেক্টরিটিতে থাকে সেটিতে আমি আসলে একটি IN_CREATE ইভেন্টের প্রতিক্রিয়া জানাচ্ছি So সুতরাং আমি প্রকৃতপক্ষে () 'ফাইলটি তৈরির প্রতিক্রিয়া হিসাবে ফাইলটি ইনএনএমডি ইভেন্ট নয়, যা পরে আসতে পারে।
আমি আমার কোডটি পরিবর্তন করতে যাচ্ছি যাতে আমি একবার IN_CREATE ইভেন্টটি পেয়ে যাব, আমি নিজেই ফাইলটিতে IN_MODIFY এ সাবস্ক্রাইব করব এবং IN_MODIFY ইভেন্ট না পাওয়া পর্যন্ত আমি আসলে ফাইলটি পড়ার চেষ্টা করব না। আমি বুঝতে পারি যে সেখানে একটি ছোট উইন্ডো রয়েছে যার মধ্যে আমি ফাইলটিতে কোনও লেখাই মিস করতে পারি তবে এটি আমার আবেদনের জন্য গ্রহণযোগ্য, কারণ সবচেয়ে খারাপ ক্ষেত্রে ফাইলটি সর্বাধিক সংখ্যক সেকেন্ড পরে বন্ধ হয়ে যাবে।