স্টিফেন কিটের উত্তরটি কী এবং আমি কেন এই পরিবর্তনটি কার্যকর করা হয়েছিল তা কভার করার চেষ্টা করব covers প্রথমত, কেউ পালন করে একটি ফাইলের নাম নতুন লাইন ধারণকারী 1 হতে পারে দ্ব্যর্থক আউটপুট । উদাহরণস্বরূপ, এই আউটপুট বিবেচনা করুন:
d41d8cd98f00b204e9800998ecf8427e foo
25af89c92254a806b2e93fffd8ac1814 bar
এর অর্থ কি এখানে দুটি ফাইল foo
এবং bar
, বা কেবলমাত্র একটি ফাইল যার ফাইলের নাম রয়েছে "foo\n25af89c92254a806b2e93fffd8ac1814 bar"
? মঞ্জুর, এই পরবর্তী সম্ভাবনা অত্যন্ত অসম্ভব, তবে এটি সম্ভব। অস্পষ্টতা সমাধানের জন্য বিকাশকারীরা ব্যাকস্ল্যাশ ( \
) দিয়ে নিউলাইনগুলি এড়াতে বেছে নিয়েছিল । আউটপুট তখন স্বতন্ত্র হয়ে যায়। তবে, এরপরে আরও একটি অস্পষ্টতা রয়েছে:
764efa883dda1e11db47671c4a3bbd9e foo\nbar
এই ফাইলটির নামটিতে কি নতুন লাইন, বা একটি ব্যাকস্ল্যাশ রয়েছে n
? এটি সমাধান করার জন্য আমাদের খুব পিছন দিক থেকে পালাতে হবে, যাতে পরবর্তী ঘটনাটি হয়ে যায়:
764efa883dda1e11db47671c4a3bbd9e foo\\nbar
অবশেষে, তারা প্রতিটি আউটপুট লাইনটি পূর্বে সংশোধন \\
করার সিদ্ধান্ত নিয়েছে যাতে কোনও পার্সারকে এটি নির্ধারণ করা সহজ হয় যে পলায়নের কাজ হয়েছে কিনা তা সনাক্ত করা সহজ করে তোলে such সম্ভবত এটি পার্সারগুলিকে বহির্গমন সংস্করণগুলি md5sum
এবং নন-এস্কেটিং সংস্করণগুলি (নন-জিএনইউ) থেকে উভয়ই আউটপুট পরিচালনা করতে দেয় was পতাকাটির অর্থ হ'ল "ব্যয়বহুল" আন-এস্কেটিং প্রয়োজন হয় না যখন প্রয়োজন হয় না। আপনি md5sum.c
নিজে পদক্ষেপে এই পার্সিংয়ের একটি উদাহরণ দেখতে পাচ্ছেন (সংযুক্ত সংস্করণে 382 লাইন)।
1 নিউলাইনের দ্বারা আমি এমন চরিত্রটি বোঝাই \n
যা মাঝে মাঝে নির্দিষ্টভাবে লাইনফিড বা এলএফ হিসাবেও উল্লেখ করা হয় ; দেখতে md5sum.c
।
*sum
ইউটিলিটিগুলি (যেমনmd5sum
, পরিবারের মতো , ই, জি,sha1sum
ইত্যাদি) একই কাজ করে।