পসিক্স দ্বারা সংজ্ঞায়িত হিসাবে কোনও ফাইলকে একটি পাঠ্য ফাইল হওয়ার জন্য কোন শর্ত পূরণ করতে হবে?


22

পসিক্স একটি পাঠ্য ফাইলটিকে এই হিসাবে সংজ্ঞায়িত করে:

একটি ফাইল যা শূন্য বা আরও বেশি লাইনে বিভক্ত অক্ষর ধারণ করে। লাইনগুলিতে NUL টি অক্ষর থাকে না এবং <নিউলাইন> অক্ষর সহ কোনওরই দৈর্ঘ্যে {LINE_MAX} বাইট অতিক্রম করতে পারে না। যদিও POSIX.1-2017 পাঠ্য ফাইল এবং বাইনারি ফাইলগুলির মধ্যে পার্থক্য না করে (আইএসও সি স্ট্যান্ডার্ড দেখুন), অনেকগুলি ইউটিলিটি কেবল পাঠ্য ফাইলগুলিতে অপারেটিং করার সময় অনুমানযোগ্য বা অর্থবহ আউটপুট তৈরি করে। যে স্ট্যান্ডার্ড ইউটিলিটিগুলির মধ্যে এই জাতীয় বিধিনিষেধ রয়েছে তারা সর্বদা তাদের STDIN বা ইনপুট ফাইল বিভাগগুলিতে "পাঠ্য ফাইলগুলি" নির্দিষ্ট করে।

সূত্র: http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_403

যাইহোক, বেশ কয়েকটি বিষয় আমি অস্পষ্ট বলে মনে করি:

  1. একটি টেক্সট ফাইল একটি নিয়মিত ফাইল হতে হবে? উপরের অংশে এটি স্পষ্টভাবে বলে না যে ফাইলটি অবশ্যই একটি নিয়মিত ফাইল হতে হবে

  2. কেবলমাত্র একটি অক্ষর এবং একটি অক্ষর থাকলে (যেমন, একটি একক অক্ষর যা একটি নতুন লাইন দিয়ে শেষ হয় না) একটি ফাইলকে একটি পাঠ্য ফাইল হিসাবে বিবেচনা করা যেতে পারে? আমি জানি এই প্রশ্নটি নিটপিকি লাগতে পারে তবে তারা "এক বা একাধিক অক্ষরের" পরিবর্তে "অক্ষর" শব্দটি ব্যবহার করে। অন্যরা দ্বিমত পোষণ করতে পারে তবে তাদের অর্থ যদি "এক বা একাধিক চরিত্র" হয় তবে আমার কাছে মনে হয় তাদের স্পষ্ট করে বলা উচিত

  3. উপরের অংশে, এটি "লাইনগুলি" রেফারেন্স তৈরি করে। আমি তাদের নামে লাইন সহ চারটি সংজ্ঞা পেয়েছি: "খালি লাইন", "প্রদর্শন লাইন", "অসম্পূর্ণ লাইন" এবং "লাইন"। আমার "খালি", "প্রদর্শন" এবং "অসম্পূর্ণ" বাদ দেওয়ার কারণে তারা কি "লাইন" অর্থ বোঝাতে অনুধাবন করবে - বা এই সংজ্ঞাগুলি চারটি কি উপরোক্ত অংশের একটি লাইন হিসাবে বিবেচিত হিসাবে অন্তর্ভুক্ত?

এই পাঠ্যের ব্লকের পরে আসা সমস্ত প্রশ্নই "অক্ষর" অর্থ "এক বা একাধিক অক্ষর" অনুমানের উপর নির্ভর করে:

  1. আমি কী নিরাপদে অনুমান করতে পারি যে কোনও ফাইল যদি খালি থাকে তবে এটি কোনও পাঠ্য ফাইল নয় কারণ এতে এক বা একাধিক অক্ষর নেই?

পাঠ্যের এই ব্লকের পরে আসা সমস্ত প্রশ্ন অনুমানের উপর নির্ভর করে যে উপরের অংশে একটি রেখাটিকে "লাইন" হিসাবে সংজ্ঞায়িত করা হয়েছে এবং তাদের নামে "রেখা" যুক্ত অন্য তিনটি সংজ্ঞা বাদ দেওয়া উচিত:

  1. "শূন্য বা আরও লাইনগুলিতে" "শূন্য" এর অর্থ কী কোনও ফাইলের মধ্যে একটি টেক্সট ফাইল হিসাবে বিবেচনা করা যেতে পারে যদি এতে এক বা একাধিক অক্ষর থাকে যা নিউলাইন দিয়ে শেষ হয় না?

  2. "শূন্য বা ততোধিক লাইন" এর অর্থ কি একবার একবার "একক" লাইন (0 বা ততোধিক অক্ষর সমাপ্তি একটি নতুন লাইনের) প্লে হয়ে আসে, এটি শেষ পংক্তির জন্য "অসম্পূর্ণ লাইন" হওয়া অবৈধ হয়ে যায় (এক বা একাধিক অ- একটি ফাইলের শেষে নতুন লাইন অক্ষর)?

  3. "নিউলাইন চরিত্র সহ" কোনও [কোনও লাইন] দৈর্ঘ্যে {LINE_MAX} বাইট অতিক্রম করতে পারে না "এর অর্থ কী কোনও পাঠ্য ফাইলে প্রদত্ত" লাইন "এ অনুমোদিত অক্ষরের সংখ্যার সীমাবদ্ধতা রয়েছে (আলাদা হিসাবে, মানটির মান) উবুন্টু 18.04-এ লিনE_MAX এবং ফ্রিবিএসডি 11.1 "2048")?


ভাল প্রশ্ন, হ্যারল্ড! পরিভাষার একটি দুর্দান্ত আলোচনার জন্য তোলে। আশা করি আমি অতিরিক্ত বার প্রশ্নটি উত্থাপন করতে পারতাম
সের্গেই কলডিয়াজনি

উত্তর:


23
  1. একটি টেক্সট ফাইল একটি নিয়মিত ফাইল হতে হবে? উপরের অংশে এটি স্পষ্টভাবে বলে না যে ফাইলটি অবশ্যই একটি নিয়মিত ফাইল হতে হবে

    না; সংক্ষিপ্তসার এমনকি বিশেষত কোনও সম্ভাব্য পাঠ্য ফাইল হিসাবে মানক ইনপুটটিকে নোট করে। অন্যান্য স্ট্যান্ডার্ড ইউটিলিটিস, যেমন make, বিশেষত অক্ষর বিশেষ ফাইলটিকে /dev/null একটি পাঠ্য ফাইল হিসাবে ব্যবহার করে ।

  2. কেবলমাত্র একটি অক্ষর এবং একটি অক্ষর থাকলে (যেমন, একটি একক অক্ষর যা একটি নতুন লাইন দিয়ে শেষ হয় না) একটি ফাইলকে একটি পাঠ্য ফাইল হিসাবে বিবেচনা করা যেতে পারে?

    এই অক্ষরটি অবশ্যই একটি <নিউলাইন> হতে হবে, বা এটি কোনও লাইন নয় এবং সুতরাং এতে থাকা ফাইলটি কোনও পাঠ্য ফাইল নয়। হ'ল বাইট 0 এ সমন্বিত একটি ফাইল একটি একক-লাইন পাঠ্য ফাইল। একটি খালি লাইন একটি বৈধ লাইন।

  3. উপরের অংশে, এটি "লাইনগুলি" রেফারেন্স তৈরি করে। আমি তাদের নামে লাইন সহ চারটি সংজ্ঞা পেয়েছি: "খালি লাইন", "প্রদর্শন লাইন", "অসম্পূর্ণ লাইন" এবং "লাইন"। আমার "খালি", "প্রদর্শন" এবং "অসম্পূর্ণ" বাদ দেওয়ার কারণে তাদের কী "লাইন" বোঝানো উচিত তা অনুমান করার কথা আমার?

    এটি আসলে কোনও অনুমান নয়, এটি যা বলে তা ঠিক। "লাইন" শব্দটি একটি প্রাসঙ্গিকভাবে যথাযথ সংজ্ঞা দেওয়া হয়েছে এবং তাই এটিই এর কথা বলছে।

  4. আমি কী নিরাপদে অনুমান করতে পারি যে কোনও ফাইল যদি খালি থাকে তবে এটি কোনও পাঠ্য ফাইল নয় কারণ এতে এক বা একাধিক অক্ষর নেই?

    খালি ফাইলটিতে শূন্য (বা আরও) লাইন থাকে এবং সুতরাং এটি একটি পাঠ্য ফাইল।

  5. "শূন্য বা আরও লাইনগুলিতে" "শূন্য" এর অর্থ কী কোনও ফাইলের মধ্যে একটি টেক্সট ফাইল হিসাবে বিবেচনা করা যেতে পারে যদি এতে এক বা একাধিক অক্ষর থাকে যা নিউলাইন দিয়ে শেষ হয় না?

    না, এই অক্ষরগুলি লাইনে সংগঠিত হয় না।

  6. "শূন্য বা ততোধিক লাইন" এর অর্থ কি একবার একবার "একক" লাইন (0 বা ততোধিক অক্ষর সমাপ্তি একটি নতুন লাইনের) প্লে হয়ে আসে, এটি শেষ পংক্তির জন্য "অসম্পূর্ণ লাইন" হওয়া অবৈধ হয়ে যায় (এক বা একাধিক অ- একটি ফাইলের শেষে নতুন লাইন অক্ষর)?

    এটি অবৈধ নয় , এটি কেবল একটি পাঠ্য ফাইল নয়। কোনও পাঠ্য ফাইলের জন্য প্রয়োজনীয় একটি ইউটিলিটি যদি সেই ফাইলটি দেওয়া হয় তবে এটি প্রতিকূল আচরণ করতে পারে

  7. "নিউলাইন চরিত্র সহ" কোনও [কোনও লাইন] দৈর্ঘ্যে {LINE_MAX} বাইট অতিক্রম করতে পারে না "এর অর্থ কী কোনও পাঠ্য ফাইলে প্রদত্ত" রেখায় "অক্ষরের সংখ্যাটির সীমাবদ্ধতা রয়েছে?

    হ্যাঁ।

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


1
পয়েন্ট 2 সম্পর্কে আপনি কি নিশ্চিত? স্ট্যান্ডার্ড স্পষ্টভাবে " 0 বা তার বেশি লাইন" রেখেছে। সুতরাং printf "a" > fileযে সংজ্ঞা অনুযায়ী একটি টেক্সট ফাইল তৈরি করা হবে। আপনার 4 টির উত্তরটি 2 এবং 5 এর উত্তরগুলির সাথে বিপরীত বলে মনে হচ্ছে, যেমন আপনি পরামর্শ দিচ্ছেন যে touch fileপাঠ্য ফাইল তৈরি printf "a" > fileকরে না এবং তৈরি করে না।
টেরডন

4
@ ইটারডন: মাইকেল এর উত্তরে আমি কোনও বৈপরীত্য দেখতে পাচ্ছি না। মূলত, তিনি বলে যাচ্ছেন বলে মনে হচ্ছে যে পসিক্স টেক্সট ফাইলটি এমন কোনও ফাইল যা এর বিষয়বস্তুগুলি রেজিপ্স্পের সাথে মেলে (.{0,M}\n)*(অন্তর্নিহিতভাবে অ্যাঙ্করড এবং উভয় প্রান্ত), যেখানে \nএকটি নতুন লাইনের সাথে .মেলে এবং এমন কোনও অক্ষরের সাথে মেলে যা কোনও নিউলাইন নয়, এবং Mসংখ্যার মানের জন্য স্থানধারক LINE_MAX -1। বিশেষত, এর দ্বারা বোঝা যায় যে খালি ফাইলটি একটি শূন্য লাইন সমন্বিত একটি বৈধ পাঠ্য ফাইল, তবে যে কোনও খালি খালি পাঠ্য ফাইলটি একটি নতুন লাইনে শেষ হওয়া উচিত (অন্যথায় এটি একটি অসম্পূর্ণ লাইন ধারণ করে, এবং একটি অসম্পূর্ণ লাইন একটি লাইন নয় )।
ইলমারি করোনেন

@ মিশেল হোমার নিয়মিত ফাইল বিষয় সম্পর্কিত, / দেব / নাল ছাড়াও অন্যান্য উদাহরণ রয়েছে কি? এটি আসলে কোনও পাঠ্য ফাইল নয় কারণ এতে এক বা একাধিক নাল অক্ষর রয়েছে।
হ্যারল্ড ফিশার

1
@ হারল্ডফিশার /dev/nullএকটি খালি ফাইল। আপনি ভাবছেন /dev/zero
মাইকেল হোমার

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

7

পসিক্স দ্বারা সংজ্ঞায়িত:

হ্যাঁ, একটি পাঠ্য ফাইল হ'ল (মূলত):

একটি ফাইল যা শূন্য বা আরও বেশি লাইনে বিভক্ত অক্ষর ধারণ করে।

এই সংজ্ঞাগুলি অন্তর্ভুক্ত করার জন্য এটি দরকারী হবে:

3.92 চরিত্রের স্ট্রিং

প্রথম নাল বাইট দ্বারা সমাপ্ত এবং অক্ষরগুলির একটি সংলগ্ন ক্রম।

3.195 অসম্পূর্ণ লাইন

ফাইলের শেষে এক বা একাধিক অ-নিউ-লাইন> অক্ষরের একটি ক্রম।

3.206 লাইন

শূন্য বা আরও অ-নিউ-লাইন> অক্ষর এবং একটি সমাপ্তি <নিউলাইন> চরিত্রের ক্রম।

৩.২৪৩ নিউলাইন চরিত্র (<নিউলাইন>)

একটি অক্ষর যা আউটপুট প্রবাহে নির্দেশ করে যে মুদ্রণটি পরবর্তী লাইনের শুরুতে শুরু করা উচিত। এটি সি ভাষায় '' n 'দ্বারা মনোনীত চরিত্র। এই অক্ষরটি পরবর্তী লাইনে চলাফেরার জন্য সিস্টেমের দ্বারা আউটপুট ডিভাইসে স্থানান্তরিত সঠিক ক্রম কিনা তা অনির্দিষ্ট নয়।

3.247 NUL

সমস্ত বিট সহ একটি অক্ষর শূন্যতে সেট করা।

মনে রাখবেন যে একটি "পাঠ্য ফাইল" এ NUL বাইট থাকতে পারে না


তাই:

  1. একটি টেক্সট ফাইল একটি নিয়মিত ফাইল হতে হবে?
    না, এটি হওয়ার দরকার নেই। একটি "পাঠ্য ফাইল" এটি পড়ার সময় যা রয়েছে তার পরিপ্রেক্ষিতে সংজ্ঞায়িত করা হয়। যদি কোনও ফাইলে "শূন্য বা আরও লাইন" থাকে তবে এটি একটি পাঠ্য ফাইল। কিছু ফাইলের মতো /dev/stdinপাঠ্য ফাইল থাকতে পারে যদি এটি একবারে পড়ে এবং পরের বারে পড়তে না পারে।
  2. কেবল একটি অক্ষর এবং একটি অক্ষর থাকলে কোনও ফাইলকে একটি পাঠ্য ফাইল হিসাবে বিবেচনা করা যেতে পারে ...?
    না, এটি একটি অসম্পূর্ণ লাইন (3.195)।
    একটি পাঠ্য ফাইলে কেবল অ-"অসম্পূর্ণ লাইনগুলি" থাকতে হবে।
  3. আমি কি অনুমান করার কথা বলছি যে তারা "লাইন" বোঝায়…?
    হ্যাঁ তুমি পারবে.
  4. আমি কি নিরাপদে অনুমান করতে পারি যে কোনও ফাইল যদি খালি থাকে তবে এটি কোনও পাঠ্য ফাইল নয়…?
    না, একটি খালি ফাইল (শূন্য অক্ষর) একটি বৈধ "পাঠ্য ফাইল"।
    উপরে থেকে: … শূন্য বা আরও লাইন… । শূন্য লাইন (শূন্য অক্ষর) একটি বৈধ "পাঠ্য ফাইল"।
  5. … একটি পাঠ্য ফাইল বিবেচনা করে যদি এতে এক বা একাধিক অক্ষর থাকে যা নিউলাইন দিয়ে শেষ হয় না?
    না, একটি বৈধ "লাইন" নয় (প্রযুক্তিগতভাবে) একটি "অসম্পূর্ণ লাইন"।
  6. "শূন্য বা আরও লাইনগুলিতে" "শূন্য" এর অর্থ কী কোনও ফাইলের মধ্যে একটি টেক্সট ফাইল হিসাবে বিবেচনা করা যেতে পারে যদি এতে এক বা একাধিক অক্ষর থাকে যা নিউলাইন দিয়ে শেষ হয় না?
    না, একটি অসম্পূর্ণ লাইন একটি "লাইন" নয়। একটি পাঠ্য ফাইলের অসম্পূর্ণ লাইন থাকবে না

  7. … এখানে কোনও পাঠ্য ফাইলে প্রদত্ত "রেখায়" অক্ষরের সংখ্যার সীমাবদ্ধতা আছে…?
    হ্যাঁ, কোনও বৈধ "পাঠ্য ফাইল" এর যে কোনও রেখায় {LINE_MAX} বাইটের বেশি (অক্ষরের বিপরীতে) অনুমতি দেওয়া হবে না।
    Limits LINE_MAX of এর মান <সীমাবদ্ধতা>> ফাইলটিতে দেওয়া হয়েছে
    (এছাড়াও সিটিতে সংবেদনশীল লাইন বাফার আকারটি পড়ুন? ):

    {LINE_MAX
    otherwise অন্যথায় উল্লিখিত না হলে, ইউটিলিটির ইনপুট লাইনের ( বর্ধিত স্ট্যান্ডার্ড ইনপুট বা অন্য কোনও ফাইল) সর্বাধিক দৈর্ঘ্য, যখন ইউটিলিটি প্রক্রিয়াকরণ পাঠ্য ফাইল হিসাবে বর্ণনা করা হয়। দৈর্ঘ্যে পিছনের জন্য জায়গা অন্তর্ভুক্ত।
    ন্যূনতম গ্রহণযোগ্য মান: _P _POSIX2_LINE_MAX}

    জিএনইউ ভিত্তিক সিস্টেমের জন্য কোনও নির্ধারিত সীমা নেই (স্মৃতি ছাড়া) :

    ম্যাক্রো: int LINE_MAX
    পাঠ্য-ভিত্তিক POSIX.2 ইউটিলিটিগুলি সমর্থন করতে পারে এমন বৃহত্তম পাঠ্য লাইন। (আপনি যদি এই ইউটিলিটিগুলির GNU সংস্করণ ব্যবহার করে থাকেন তবে উপলব্ধ ভার্চুয়াল মেমরির দ্বারা আরোপিত ব্যতীত কোনও আসল সীমা নেই, তবে পাঠাগারটি আপনাকে এটি বলার উপায় নেই))

    এটি posix_lim.h2048 (কমপক্ষে bit৪ বিট লিনাক্স জিএনইউ সিস্টেমের জন্য) হিসাবে সংজ্ঞায়িত হয়েছে বলে মনে হচ্ছে :

    $ grep -ri 'POSIX2_LINE_MAX' /usr/include/ 
    
    /usr/include/x86_64-linux-gnu/bits/xopen_lim.h:#define NL_LANGMAX       _POSIX2_LINE_MAX
    /usr/include/x86_64-linux-gnu/bits/posix2_lim.h:#define _POSIX2_LINE_MAX                2048
    /usr/include/x86_64-linux-gnu/bits/posix2_lim.h:#define LINE_MAX                _POSIX2_LINE_MAX
    

    এটি পসিক্স ইউটিলিটি গেটকনফ ব্যবহার করেও পাওয়া যেতে পারে :

    $ getconf LINE_MAX
    2048
    

সম্পর্কিত: পাঠ্য ফাইলগুলিকে একটি নতুন লাইন দিয়ে কেন শেষ করা উচিত?


2
এই উত্তরটি বেশিরভাগ ক্ষেত্রেই সঠিক, তবে "অবশ্যই একটি পাঠ্য ফাইল অবশ্যই একটি নিয়মিত ফাইল হতে হবে" এর সঠিক উত্তর নেই । যে কোনও ধরনের ফাইল একটি পাঠ্য ফাইল হতে পারে, এটি সামগ্রীর বিষয়, ফাইলের প্রকার অপ্রাসঙ্গিক। fileউপযোগ শুধুমাত্র বিশেষ ফাইলের জন্য ফাইল টাইপ রিপোর্ট, কিন্তু যে ঠিক কিভাবে ইউটিলিটি কাজ, ব্যবহার এর file - <…বা (লিনাক্স) file -s …একটি বিশেষ ফাইলের জন্য ফাইল সামগ্রীতে তার হিউরিস্টিক দেখতে। আপনি যখনই এটি খুলবেন তখন একটি বিশেষ ফাইলে আলাদা আলাদা সামগ্রী থাকতে পারে, তাই এটি প্রতিবার পাঠ্য ফাইল হতে পারে বা হতে পারে। /dev/nullসর্বদা একটি পাঠ্য ফাইল কারণ এটির সামগ্রীতে সর্বদা একটি পাঠ্য ফাইল থাকে।
গিলস 'এ-ও অশুভ হওয়া বন্ধ করুন'

1
grepফাইলগুলিতে ব্যবহার না করে আপনি getconfসিস্টেম কনফারেন্সের মানগুলি ব্যবহার করতে পারেন উদাহরণস্বরূপ getconf LINE_MAX, যা আমার সিস্টেমে 2048 (বাইটস) ফেরায় (উবুন্টু 16.04)।
হিমাইল

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