একটি ফাইলের শেষ চরিত্রটি কী?


19

আমি কেবল "একটি ফাইলের শেষে একটি নিউলাইন চরিত্রটি সরানো" এর উত্তরগুলি পড়েছি এবং প্রত্যেকে শেষ চরিত্রটি মুছতে বলেছে। আমার প্রশ্ন হ'ল, ইওফ চরিত্রটি কি শেষ নয়?



1
@ সোরেনবজর্নস্টেড আমি আরও যুক্ত করতে চাই যে যখন ইউনিক্স পাঠ্য ফাইলের শেষে যখন একটি নতুন লাইন থাকে তখন এটি সেখানে থাকে কারণ এটি শেষ লাইনটি বন্ধ করে দেয়। একটি খালি পাঠ্য ফাইলটির শেষে কোনও নতুন লাইন নেই: এটি শূন্য অক্ষরের ক্রম।
কাজ

3
কিছুটা পেডেন্টিক হওয়ার জন্য, সিপিএম এবং ডস OF জেএওএফ অক্ষর হিসাবে ব্যবহার করেছে এবং আপনি এখনও মাঝে মাঝে files জেড দিয়ে শেষ হওয়া ফাইলগুলির মুখোমুখি হতে পারেন।
এডওয়ার্ড ফালক

উত্তর:


13

পূর্ববর্তী উত্তরগুলি সঠিকভাবে স্থিতি হিসাবে কোনও ফাইলের শেষ ফাইলের অক্ষর দিয়ে শেষ হয় না। তবে আমি মনে করি উত্তর এবং মন্তব্যে কিছু উল্লেখযোগ্য ভুল রয়েছে contain

  • ASCII অক্ষর সেটটিতে একটি EOV অক্ষর নেই। বেশ কয়েকটি "শেষ" নিয়ন্ত্রণের অক্ষর রয়েছে: পাঠ্যের সমাপ্তি (3), সংক্রমণ সমাপ্তি (4), সংক্রমণ ব্লকের সমাপ্তি (23), মাঝারিটির শেষ (25)। ফাইল বিভাজক (২৮) সম্ভবত একটি EOF অক্ষরের নিকটে আসে comes কোড 26 হ'ল "বিকল্প", ইওএফ নয়।

  • Ctrl- Dশুধুমাত্র টার্মিনাল ইনপুট এর সাথে সম্পর্কিত। উদাহরণস্বরূপ কমান্ড cat filea fileb filec > outfileজড়িত না Ctrl- D। যাইহোক, আপনি ছাড়া অন্য কিছু টার্মিনাল ফাইলের শেষে চরিত্র পরিবর্তন করতে পারেন Ctrl- Dব্যবহার sttyকমান্ড।

  • কড়া কথায় বলতে গেলে, Ctrl- D(বা যা আপনি বদলে গেছেন) কোনও ইওএফ কী কোড নয়। এটি যা করে তা হ'ল readইনপুট উপলভ্য কিসের সাহায্যে সিস্টেম কলকে রিটার্ন করা ঠিক যেমন রিটার্ন টিপলে পঠিত সিস্টেম কল কলকারীকে অক্ষরের একটি লাইন ফিরিয়ে দেয়। কনভেনশন দ্বারা পঠিত সিস্টেম কল থেকে শূন্যের ফেরতের মান (অর্থাত শূন্য অক্ষরগুলি পড়া) ফাইল শর্তের সমাপ্তি নির্দেশ করে। যাইহোক, ইনপুট ফাইলটি স্বয়ংক্রিয়ভাবে বন্ধ হয় না এবং, যদি ইনপুটটি টার্মিনাল থেকে আসে তবে এটি "ফাইলের শেষ" অবস্থায় রাখা হয় না। আপনি এমন একটি প্রোগ্রাম লিখতে পারেন যা "ফাইলের সমাপ্তি" পরেও টার্মিনাল থেকে পড়া চালিয়ে যায় এবং পঠিত কলটি পরবর্তী ইনপুট লাইনের জন্য শূন্য থেকে ফিরে আসতে পারে।

  • ইওফ এবং ইওল অক্ষরের মধ্যে সাদৃশ্যটি যদি দেখা যায় Ctrl- Dচাপানো হয় তবে কিছু ইনপুট ইতিমধ্যে লাইনে লেখা হয়েছে। উদাহরণস্বরূপ, আপনি যদি "এবিসি" এবং টিপেন Ctrl- Dরিড কল ​​কল রিটার্ন করে তবে এইবার 3 এর রিটার্ন মান সহ এবং বাফারে থাকা "এবিসি" দিয়ে আর্গুমেন্ট হিসাবে পাস হয়েছে। যেহেতু পঠন 0 ফিরে আসে না, এটি উপরের কনভেনশন দ্বারা একটি ইওএফ শর্ত হিসাবে ব্যাখ্যা করা যায় না। একইভাবে, রিটার্নটিতে টিপলে পুরো ইনপুট লাইনের (নিউলাইন সহ) রিড কলটি রিটার্ন করে। আপনি catকমান্ডটি দিয়ে এটি ব্যবহার করে দেখতে পারেন : লাইনে কিছু অক্ষর লিখুন এবং Ctrl- টিপুন D। অক্ষরগুলি আপনার কাছে প্রতিধ্বনিত হতে দেখবে এবং আরও ইনপুটটির catজন্য অপেক্ষা করবে ।

  • উপরের সমস্তগুলি তখনই প্রয়োগ হয় যখন টার্মিনালটি "কাঁচা" মোডে থাকে, "কাঁচা" মোডের বিপরীতে, যেখানে লাইন ইনপুট প্রক্রিয়াকরণটি হ্রাস করা হয়। কাঁচা মোডে একটি সিটিআরএল-ডি অক্ষরটি সত্যই ইনপুট বাফারকে সরবরাহ করা হয়।


19

এএসসিআইআই কন্ট্রোল অক্ষরের 1960 এর দশকের সংজ্ঞা রয়েছে (আসলে আপনি কোনও নেটওয়ার্ককে কী বিবেচনা করতে পারেন তার পূর্ববর্তী )। এই সমস্ত নিয়ন্ত্রণ অক্ষর সেভাবে টেলিযোগযোগ সরঞ্জামগুলির জন্য যেভাবে সংজ্ঞায়িত হয়েছিল সেভাবে ব্যবহার হয় না।

ইউনিক্সের মতো সিস্টেমে কোনও EOFঅক্ষরের প্রয়োজন নেই ; কিছুই ব্যবহৃত হয় না। সিস্টেম অ্যাপ্লিকেশনগুলিকে একটি ফাইলে কতগুলি বাইট রয়েছে তা বলতে পারে:

  • অন্য কয়েকটি সিস্টেমে (ভিএমএস, ডস, উইন্ডোজে দেখা যায়) একটি নিয়ন্ত্রণ-জেড ফাইলের শেষের হিসাবে চিহ্নিত হতে পারে কারণ পুরানো সংস্করণগুলিতে ফাইলটি কতগুলি বাইট ফাইল রয়েছে তা কিছু অ্যাপ্লিকেশনকে বলতে পারেনি।

    ভিএমএসের ক্ষেত্রে, সি রানটাইম যেভাবে কাজ করেছিল তার কারণে সীমাবদ্ধতা ছিল। সংসদীয়-ভাষা অ্যাপ্লিকেশনগুলি সঠিক ফাইলের আকার পেতে পারে (এবং করেছিল) did

  • শেলের ইউনিক্স সিস্টেমগুলি প্রচলিতভাবে একটি অ্যাপ্লিকেশনকে বলে যে ইনপুট (ফাইল) শেষ হয়ে গেছে, তবে নিয়ন্ত্রণ-ডি ফাইলটিতে সংরক্ষণ করা হয় না control

সি তে, EOFউদ্দেশ্যমূলকভাবে -1এটি ইঙ্গিত করা হয়েছে যে এটি কোনও বৈধ চরিত্র নয়। স্ট্যান্ডার্ড I / O ফিরিয়ে দেয় EOFযখন কোনও ফাইলের শেষের শর্তটি সনাক্ত হয় - কোনও বিশেষ অক্ষর নয়।

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


8
পসিক্স একটি পাঠ্য ফাইলকে একটি ফাইল হিসাবে সংযুক্ত করে যেখানে লাইনগুলির অনুক্রম থাকে এবং প্রতিটি লাইনে একটি নতুন লাইন অনুসরণ করে অ-নিউলাইন অক্ষরগুলির ক্রম হিসাবে পরিবর্তন করা হয়। সুতরাং 0x0A ব্যতীত অন্য কোনও কিছুর সাথে শেষ হওয়া কোনও ফাইল মেনে চলার পাঠ্য ফাইল নয়।
দামিয়ান ইয়ারিক

2
আমি এটি সম্পর্কে সচেতন, সে কারণেই আমি উল্লেখ করেছি যে পাঠ্য সম্পাদকরা কাজ করেন। (বাইনারি ফাইলগুলির তেমন কোনও বাধা নেই)।
টমাস ডিকি

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

(1) ভিএমএসের আগে, আরটি -11 আরএসএক্স -11 টপস -10 এর ফাইল সিস্টেমগুলি কেবল একটি ব্লকের সাথে সুনির্দিষ্ট ছিল এবং একটি EOF অক্ষর প্রয়োজন needed সিপি / এমও এটি করেছিল, যা স্পষ্টতই এটি ডিসি থেকে অনুলিপি করেছিল এবং পরিবর্তে তাড়াতাড়ি এমএস-ডস দ্বারা অনুলিপি করে পরে উইন্ডোজে চলে যায়। (২) ইউনিক্সে এটিটিটি ড্রাইভারটি শেল নয়, জোহানএম আরও বিশদে বর্ণনা করেছেন, যদিও লোকেরা সাধারণত টিটিআই ডিভাইসে শেল চালায়।
dave_thompson_085

অবশ্যই - ডিসি সেখানে ছিলেন (এবং নোট করুন যে আমি পুরানো সংস্করণ উল্লেখ করেছি ) mentioned এটি সিপি / এম বৈশিষ্ট্যটির উত্স কিনা তা অন্বেষণ করা একটি আকর্ষণীয় বিষয় হতে পারে (এখানে নয়); আমি বিকল্পগুলির কিছু পটভূমি দেওয়ার জন্য এই কেসগুলি উল্লেখ করেছি।
থমাস ডিকি

7

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


1
হ্যাঁ তবে এএসসিআইআই টেবিলটিতে ইওএফটি 26 হয় তাই আমি ভেবেছিলাম শেষ বাইটটি বাইনারি উপস্থাপিত 26 টি So সুতরাং কোনও প্রোগ্রাম যা একটি ইনপুট পড়বে তা কোথায় শেষ হবে তা কীভাবে জানতে পারে?
sworwitz

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

@ সোয়ারউইটজ: সি-র সাথে, ইনপুট রিডিং ফাংশনগুলি যা কল প্রতি অক্ষর ফেরত দেয় একটি int (সাধারণত একটি 32 বিট সংখ্যা তবে ন্যূনতম 16 বিট হতে হবে) কোনও চর নয়। ফাংশন সিগন্যাল এবং ইওএফ -1 (0xffffffff) ফিরিয়ে দিয়ে যা বৈধ 8 বিট মান নয় তাই এটি কোনও ASCII অক্ষর দ্বারা বিভ্রান্ত হবে না, এমনকি 0xff নয়। কোনও স্ট্রিং ফিরিয়ে ফেলা ফাংশনগুলি পড়ার ডেটার দৈর্ঘ্যও প্রদান করে। এই দৈর্ঘ্যটি কোনও ডেটা বা ডেটার শেষের সংকেত দিতে ব্যবহৃত হতে পারে (আবার, দৈর্ঘ্য -1 হতে পারে)। অবশেষে, এমন একটি ফাংশনও রয়েছে যা আপনি কল করতে পারবেন যা আপনাকে বলবে যে কোনও প্রবাহ শেষের দিকে পৌঁছেছে কিনা
slebetman

ঠিক আছে ধন্যবাদ! সুতরাং যখন আমি ব্যাশে সিআরটিএল + ডি টিপবো আমি ইনপুটটিতে ASCII অক্ষর দেব, তাই না?
sworwitz

পছন্দ করুন ইনপুটটিতে bashহাত দেওয়ার আগে এটি টিটিওয়াই ড্রাইভার দ্বারা ম্যাসেজ করা হয়। এই ড্রাইভারটি সিটিআরএল-ডিটিকে বাধা দেয় এবং একটি ইওএফ প্রেরণ করে bash (যেখানে ইওএফ কোনও অক্ষর নয়, তবে একটি বিশেষ ফাইলের স্থিতি রয়েছে)
স্টিগ হেমার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.