ওভাররাইট করা অবস্থায় আপনি যখন কোনও ফাইল পড়েন তখন কী হয়?


26

ধরুন আমি কোনও ফাইল পড়েছি (বিড়াল) যখন অন্য একটি প্রক্রিয়া এর বিষয়বস্তুগুলি পুনরায় লিখছে। আউটপুট কি অনুমানযোগ্য? কি হত?


3
আচরণটি অনির্ধারিত, আপনার কখনই এটি করা উচিত নয়।
ডেইজি

উত্তর:


19

এটি নির্ভর করে লেখক কী করেন।

লেখক যদি বিদ্যমান ফাইলটি ওভাররাইট করে দেয় তবে লেখক পাঠককে ছাড়িয়ে গেলে নতুন সামগ্রীটি পড়বে, যদি তা হয় তবে। লেখক এবং পাঠক যদি চলক গতিতে এগিয়ে যান তবে পাঠক বিকল্পভাবে পুরানো এবং নতুন সামগ্রী দেখতে পাবেন।

লেখক যদি ফাইলটি লিখতে শুরু করার আগে এটি কেটে দেয় তবে পাঠক সেই ফাইলটির শেষের দিকে দৌড়াবেন।

লেখক যদি একটি নতুন ফাইল তৈরি করে তবে নতুন ফাইলটিকে পুরানো নামে সরিয়ে দেয়, পাঠক পুরানো ফাইলটি থেকে পড়া চালিয়ে যাবেন। যদি একটি খোলা ফাইল সরানো বা সরানো হয়, ফাইলগুলি যে প্রক্রিয়াগুলি খোলায় সেগুলি একই ফাইল থেকে পড়া চালিয়ে যায়। যদি ফাইলটি সরিয়ে ফেলা হয় তবে এটি শেষ ডিস্কে বন্ধ না হওয়া অবধি ডিস্কে থাকে (তবে এটি আবার খোলার কোনও উপায় ছাড়াই)।

ইউনিক্স সিস্টেমে বাধ্যতামূলক লক না থাকে । কোনও অ্যাপ্লিকেশন যদি নিশ্চিত করতে চায় যে এর লেখক উপাদান এবং এর পাঠক উপাদান একে অপরের পায়ের আঙ্গুলের উপরে না পড়ে, তবে এটি সঠিকভাবে লকিং ব্যবহার করা বিকাশকারীদের up কিছু ব্যতিক্রম রয়েছে যেখানে কার্নেলের মাধ্যমে খোলা ফাইলটি ব্যবহারকারী অ্যাপ্লিকেশন দ্বারা রাইটিং থেকে সুরক্ষিত থাকতে পারে, উদাহরণস্বরূপ একটি লুপ- মাউন্টেড ফাইল সিস্টেম চিত্র বা একটি ইউনিক্স বৈকল্পিকের উপর চালিত হওয়া একটি এক্সিকিউটেবল।


গিলস, আপনার ব্যাখ্যাটি কি ftp/ sftpপরিস্থিতিতেও প্রযোজ্য ? বলুন যে কোনও প্রক্রিয়া একটি সঞ্চারিত ftpফাইল পড়া শুরু করে যখন একই ফাইলটির অন্য একটি সংস্করণ নতুন সংক্রমণের কারণে এটিকে ওভাররাইট করে।
iruvar 4'14

@ 1_CR হ্যাঁ সেক্ষেত্রে লেখক এবং পাঠক এফটিপিডি প্রক্রিয়া।
গিলস 'অশুভ হওয়া বন্ধ করুন'

এখানে ওভারটেক মানে কি?
ভিক্টর চয়ে

@ ভিক্টরচয়ে স্ট্যান্ডার্ড অর্থ: অন্য কারও পিছনে / পরে আরম্ভ করা এবং এক পর্যায়ে তাদের সামনে চলে যাওয়া।
গিলস 'অশুভ হওয়া বন্ধ করুন'

18

এটি একটি ধ্রুপদী রেসের শর্ত, সুতরাং সংজ্ঞা দ্বারা ফলাফলটি অনাকাঙ্ক্ষিত।

অন্যদের মধ্যে এটি নির্ভর করে

  • fopen(3)বা open(2)মোড লিখুন,
  • কীভাবে / যদি লেখক এর আউটপুটটি বাফার করছে,
  • পাঠক কীভাবে ফাইলটি পড়ছেন,
  • পাঠক এবং লেখকের মধ্যে গতির পার্থক্য,
  • পঠন এবং লেখকের শুরুতে সময়ের পার্থক্য।
  • এবং অবশ্যই, আধুনিক মাল্টি-কোর মেশিনগুলিতে, অন্যান্য বিষয়গুলি নিম্নচাপে (যেমন প্রক্রিয়া নির্ধারণের সময়সূচি) দ্বারা জিনিসগুলি আরও জটিল।

যদি আপনার কোনও ফাইল পুনর্লিখনের সময় পড়তে পারা প্রয়োজন হয় তবে আপনি লেখককে ফাইলের একটি ক্ষণস্থায়ী অনুলিপি তৈরি করতে পারেন, এটি পরিবর্তন করতে পারেন, তারপরে এটি মূল ফাইলটিতে অনুলিপি করতে পারেন। rsyncউদাহরণস্বরূপ এই উপায়ে এটি করে । এটি বাস্তবায়নের বেশ কয়েকটি উপায় রয়েছে তবে নিখরচায় দুপুরের খাবার নয়। প্রতিটি পদ্ধতির নিজস্ব ত্রুটি এবং ফলাফল রয়েছে।


1
এই উত্তরটি আমার চেয়ে অনেক বেশি ব্যাপক। আমার উত্তর মোছা হচ্ছে।
হত্যাকারী

0

পূর্ববর্তী প্রতিক্রিয়াশীলদের এর চেয়ে আরও বিস্তৃত ব্যাখ্যা রয়েছে, তবে এখানে একটি কৌশল যা স্পষ্টতই কাজ করে, প্রায় তিনি যা চান ঠিক তেমন করে:

$ tail -f <filename>

ফাইলটি লিখিত হওয়ার সাথে সাথে আপনাকে দেখানো হবে। আপনি যদি কোনও ফাইলের মধ্যে STDERR টি পাইপ করতে চান তবে কার্যকর তবে এটি অন্য টার্মিনাল উইন্ডোতে দেখুন, উদাহরণস্বরূপ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.