অদ্ভুত কন্ট্রোল-ডি আচরণ


9

আমি catখুব সাধারণ পাঠ্য সম্পাদক হিসাবে ব্যবহার করে করতে পারি cat > foo.txt
আমি যদি তখন টাইপ করি:

bar
baz

এবং তারপরে ctrl+ টিপুন D, এটি এখন এর মতো দেখাচ্ছে:

$ cat > foo.txt
bar
baz^D

এ কার্সার দিয়ে ^। আমি যদি আবার এটি টিপতাম তবে ফাইলটি সেভ হয়ে যাবে। যাইহোক আমি যদি কিছু টিপਦਾ (ঠিক আছে তবে কিছু নয় তবে বেশিরভাগ কিছুই), আমি কেবল ফাইলটি সম্পাদনা করতে থাকি।

এটা কি স্বাভাবিক আচরণ?

উত্তর:


13

হ্যাঁ. এটি ^Dআসলেই করতে হয়: এটি কেবল বর্তমান read(2)কলটি বন্ধ করে দেয় ।

যদি প্রোগ্রামটি করে int rdbytes = read(fd, buffer, sizeof buffer);এবং আপনি অভ্যন্তরীন টিপুন ^D, read()বাফারে বর্তমানে পঠিত বাইটগুলি দিয়ে তাদের নম্বরটি ফিরিয়ে দেয়। লাইন সমাপ্তির ক্ষেত্রেও একই ঘটনা ঘটে; \nশেষে সবসময় বিতরণ করা হয়।

সুতরাং কেবল একটি ^Dরেখার শুরুতে বা অন্যটির পরে ইওএফকে সংকেতকরণের, প্রত্যাবর্তনের ^Dপছন্দসই প্রভাব রয়েছে ।read()0


এটি আপনি কোনও রেখাটি (পিছনের সাথে বা ছাড়াই) সংজ্ঞায়িত করে তার উপর নির্ভর করে \nতবে কেবল ^Dপর পর দুবার চাপতে এবং একটি চূড়ান্ত নিউলাইন চর তৈরি না করে একটি ইওএফ অবস্থার কারণ হতে পারে (যা করার আগে এন্টার টিপুন ^D)।
পিটার.ও

আপনার ঠিক কথা, আমি এটি উল্লেখ করতে ভুলে গেছি: লাইনের শুরু এবং "সবেমাত্র চাপ করা ^ ডি" এই দুটি পরিস্থিতি যেখানে বাফার খালি রয়েছে, তাই OF ডি read()ফিরে আসবে 0, ইওএফ নির্দেশ করে।
glglgl

11

হ্যাঁ, এটি স্বাভাবিক আচরণ। একটি একক কন্ট্রোল-ডি সাধারণত লাইনের শুরু হলেই তা ভেঙে যায়। এটি একটি নিয়ন্ত্রণ-ডি দিয়ে প্রস্থান করে:

$ cat > foo.txt
bar
baz
^D

একটি লাইনের শেষে দু'বার কন্ট্রোল-ডি বিচ্ছিন্ন হয়ে যায়, কোনও পেছনের নতুন লাইনের চর ছাড়া ...
পিটার.ও

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