ধরুন আমি কোনও ফাইল পড়েছি (বিড়াল) যখন অন্য একটি প্রক্রিয়া এর বিষয়বস্তুগুলি পুনরায় লিখছে। আউটপুট কি অনুমানযোগ্য? কি হত?
ধরুন আমি কোনও ফাইল পড়েছি (বিড়াল) যখন অন্য একটি প্রক্রিয়া এর বিষয়বস্তুগুলি পুনরায় লিখছে। আউটপুট কি অনুমানযোগ্য? কি হত?
উত্তর:
এটি নির্ভর করে লেখক কী করেন।
লেখক যদি বিদ্যমান ফাইলটি ওভাররাইট করে দেয় তবে লেখক পাঠককে ছাড়িয়ে গেলে নতুন সামগ্রীটি পড়বে, যদি তা হয় তবে। লেখক এবং পাঠক যদি চলক গতিতে এগিয়ে যান তবে পাঠক বিকল্পভাবে পুরানো এবং নতুন সামগ্রী দেখতে পাবেন।
লেখক যদি ফাইলটি লিখতে শুরু করার আগে এটি কেটে দেয় তবে পাঠক সেই ফাইলটির শেষের দিকে দৌড়াবেন।
লেখক যদি একটি নতুন ফাইল তৈরি করে তবে নতুন ফাইলটিকে পুরানো নামে সরিয়ে দেয়, পাঠক পুরানো ফাইলটি থেকে পড়া চালিয়ে যাবেন। যদি একটি খোলা ফাইল সরানো বা সরানো হয়, ফাইলগুলি যে প্রক্রিয়াগুলি খোলায় সেগুলি একই ফাইল থেকে পড়া চালিয়ে যায়। যদি ফাইলটি সরিয়ে ফেলা হয় তবে এটি শেষ ডিস্কে বন্ধ না হওয়া অবধি ডিস্কে থাকে (তবে এটি আবার খোলার কোনও উপায় ছাড়াই)।
ইউনিক্স সিস্টেমে বাধ্যতামূলক লক না থাকে । কোনও অ্যাপ্লিকেশন যদি নিশ্চিত করতে চায় যে এর লেখক উপাদান এবং এর পাঠক উপাদান একে অপরের পায়ের আঙ্গুলের উপরে না পড়ে, তবে এটি সঠিকভাবে লকিং ব্যবহার করা বিকাশকারীদের up কিছু ব্যতিক্রম রয়েছে যেখানে কার্নেলের মাধ্যমে খোলা ফাইলটি ব্যবহারকারী অ্যাপ্লিকেশন দ্বারা রাইটিং থেকে সুরক্ষিত থাকতে পারে, উদাহরণস্বরূপ একটি লুপ- মাউন্টেড ফাইল সিস্টেম চিত্র বা একটি ইউনিক্স বৈকল্পিকের উপর চালিত হওয়া একটি এক্সিকিউটেবল।
ftp
/ sftp
পরিস্থিতিতেও প্রযোজ্য ? বলুন যে কোনও প্রক্রিয়া একটি সঞ্চারিত ftp
ফাইল পড়া শুরু করে যখন একই ফাইলটির অন্য একটি সংস্করণ নতুন সংক্রমণের কারণে এটিকে ওভাররাইট করে।
এটি একটি ধ্রুপদী রেসের শর্ত, সুতরাং সংজ্ঞা দ্বারা ফলাফলটি অনাকাঙ্ক্ষিত।
অন্যদের মধ্যে এটি নির্ভর করে
fopen(3)
বা open(2)
মোড লিখুন,যদি আপনার কোনও ফাইল পুনর্লিখনের সময় পড়তে পারা প্রয়োজন হয় তবে আপনি লেখককে ফাইলের একটি ক্ষণস্থায়ী অনুলিপি তৈরি করতে পারেন, এটি পরিবর্তন করতে পারেন, তারপরে এটি মূল ফাইলটিতে অনুলিপি করতে পারেন। rsync
উদাহরণস্বরূপ এই উপায়ে এটি করে । এটি বাস্তবায়নের বেশ কয়েকটি উপায় রয়েছে তবে নিখরচায় দুপুরের খাবার নয়। প্রতিটি পদ্ধতির নিজস্ব ত্রুটি এবং ফলাফল রয়েছে।
পূর্ববর্তী প্রতিক্রিয়াশীলদের এর চেয়ে আরও বিস্তৃত ব্যাখ্যা রয়েছে, তবে এখানে একটি কৌশল যা স্পষ্টতই কাজ করে, প্রায় তিনি যা চান ঠিক তেমন করে:
$ tail -f <filename>
ফাইলটি লিখিত হওয়ার সাথে সাথে আপনাকে দেখানো হবে। আপনি যদি কোনও ফাইলের মধ্যে STDERR টি পাইপ করতে চান তবে কার্যকর তবে এটি অন্য টার্মিনাল উইন্ডোতে দেখুন, উদাহরণস্বরূপ।