স্টিডিন, স্টডআউট এবং স্ট্ডার সম্পর্কে বিভ্রান্ত?


230

আমি বরং এই তিনটি ফাইলের উদ্দেশ্য নিয়ে বিভ্রান্ত হয়েছি। যদি আমার বোধগম্যতা সঠিক stdinহয় তবে কোনও ফাইল প্রক্রিয়াটিতে কোনও কাজ চালনার অনুরোধগুলিতে stdoutযে ফাইলটি লিখেছিল , তা কি সেই ফাইলটি যার মধ্যে কার্নেল তার আউটপুটটি লিখবে এবং যে অনুরোধ প্রক্রিয়াটি অনুরোধ করছে সেখান থেকে তথ্যটি অ্যাক্সেস করে এবং stderrফাইলটি এতে ফাইল হয় যা সমস্ত ব্যতিক্রম প্রবেশ করানো হয়েছে। এগুলি আসলে ঘটে কিনা তা যাচাই করতে এই ফাইলগুলি খোলার সময়, আমি এমন কিছু বলেছি বলে মনে হয় নি!

আমি যা জানতে চাই তা হ'ল এই ফাইলগুলির উদ্দেশ্যটি কী, খুব অল্প প্রযুক্তিগত জারগন সহ একেবারে বোবা উত্তর!


36
পর্যবেক্ষণ: এই প্রশ্নটি 2010 সালে ফিরে গ্রহণযোগ্য ছিল, তবে আজকাল খুব তাড়াতাড়ি কমিয়ে দেওয়া হবে।
বাইজোর

3
@ ব্র্যান্ডন আপনি কি কারণ সরবরাহ করতে পারেন? আমি মনে করি এটি আপনার মন্তব্যের জন্য মূল্যবান হবে।
স্বতন্ত্র

3
@ বাইকসর ন্যায্য হতে, আমি জিজ্ঞাসা করব: অপের পোস্টটি কি তার কোডটি ডিবাগ করতে সহায়তা করার জন্য লোকদের কাছে জিজ্ঞাসা করেছিল? দেখে মনে হচ্ছে শৌভিক স্ট্যান্ডিন, স্টাডআউট এবং স্টাডারের উদ্দেশ্য সম্পর্কিত একটি প্রশ্ন জিজ্ঞাসা করেছিল। অপের পোস্টটি কৌতূহলের বাইরে বলে মনে হচ্ছে, না? (আমি আসলে এটি নিজেই এটিএম সম্পর্কে শিখছি। ধন্যবাদ, এস, পোস্টটি সরিয়ে না দেওয়ার জন্য)
সানসায়ে

2
@ ব্যবহারকারী 123456 আপনি সঠিক আছেন। আমি একটি সফ্টওয়্যার বিকাশকারী হতে শিখছিলাম এবং এস / ও পিছনে তখন প্রোগ্রামিং সম্পর্কে শেখার দুর্দান্ত জায়গা ছিল। আমরা মূলত এটি ইচ্ছুক ছিল সমস্ত প্রশ্নের কম্পিউটিং বিজ্ঞানের জন্য বাছাইয়ের একটি উইকি সেবা। #juniorDevForLife
Shouvik

3
ইতিহাসের এই বিটটির জন্য শৌভিক ধন্যবাদ। আমি কীভাবে সফ্টওয়্যার বিকাশকারী হতে হবে তা শিখছি (এসএফ-তে একটি দুর্দান্ত শিবিরে স্বীকৃত হয়েছি)। আমি এখনও এস / ও-তে মোটামুটি নতুন এবং আমি কী পোস্ট করতে পারি এবং কী করতে পারি তা সম্পর্কে এখনও অনিশ্চিত। আমি দেখতে পেয়েছি যে এখানে সংযম বেশ কঠোর হতে পারে। আমি সেই হ্যাশ ট্যাগটি পছন্দ করি। #juniorDevForLife। আমি এখানে মন্তব্য করার পরিবর্তে আপনাকে বিকাল বানাব যেহেতু এটি আলোচনায় কিছুই যোগ করে না, তবে আমি বিশ্বাস করি না যে এস / ও-তে একটি বিকেলের ব্যবস্থা আছে। দিন শুভ হোক.
সানসায়ে

উত্তর:


251

স্ট্যান্ডার্ড ইনপুট - আপনার প্রক্রিয়াটি আপনার কাছ থেকে তথ্য পেতে এই ফাইল হ্যান্ডেলটি পড়ে।

স্ট্যান্ডার্ড আউটপুট - আপনার প্রক্রিয়া এই ফাইলের হ্যান্ডেলটিতে সাধারণ তথ্য লিখবে।

স্ট্যান্ডার্ড ত্রুটি - আপনার প্রক্রিয়া এই ফাইলের হ্যান্ডেলটিতে ত্রুটি সম্পর্কিত তথ্য লিখে।

এটিকে আমি প্রায় তৈরি করতে পারছি না :-)

অবশ্যই, এটি বেশিরভাগই কনভেনশন দ্বারা। আপনি যদি চান আপনার স্ট্যান্ডার্ড আউটপুটে আপনার ত্রুটি সম্পর্কিত তথ্য লিখতে বাধা দেওয়ার কিছুই নেই। এমনকি আপনি তিনটি ফাইল হ্যান্ডলগুলি পুরোপুরি বন্ধ করতে পারেন এবং আপনার নিজের ফাইলগুলি I / O এর জন্য খুলতে পারেন।

যখন আপনার প্রক্রিয়া শুরু হয়, এর মধ্যে ইতিমধ্যে এই হ্যান্ডলগুলি খোলা থাকা উচিত এবং এটি কেবল এগুলি থেকে পড়ে এবং / বা তাদের কাছে লিখতে পারে।

ডিফল্টরূপে, তারা সম্ভবত আপনার টার্মিনাল ডিভাইসের সাথে সংযুক্ত রয়েছে (যেমন, /dev/tty) তবে শেলগুলি আপনাকে আপনার প্রক্রিয়া শুরুর আগে এই হ্যান্ডলগুলি এবং নির্দিষ্ট ফাইল এবং / অথবা ডিভাইসগুলির (বা এমনকি অন্যান্য প্রক্রিয়াগুলিতে পাইপলাইনগুলির) মধ্যে সংযোগ স্থাপনের অনুমতি দেবে (কিছু কিছু) ম্যানিপুলেশনগুলি সম্ভবত চালাক)।

একটি উদাহরণ হচ্ছে:

my_prog <inputfile 2>errorfile | grep XYZ

যা হবে:

  • জন্য একটি প্রক্রিয়া তৈরি my_prog
  • inputfileআপনার স্ট্যান্ডার্ড ইনপুট হিসাবে খুলুন (ফাইল হ্যান্ডেল 0)।
  • errorfileআপনার স্ট্যান্ডার্ড ত্রুটি হিসাবে খুলুন (ফাইল হ্যান্ডেল 2)
  • জন্য অন্য প্রক্রিয়া তৈরি grep
  • এর স্ট্যান্ডার্ড ইনপুটটির মান আউটপুট সংযুক্ত my_progকরুন grep

আপনার মন্তব্য পুনরায়:

আমি যখন এই ফাইলগুলিকে / ডিভ ফোল্ডারে খুলি, তখন কীভাবে আমি কখনই কোনও প্রক্রিয়াটির আউটপুট দেখতে পাব না?

কারণ তারা সাধারণ ফাইল নয়। ইউনিক্স যখন কোথাও একটি ফাইল সিস্টেমে ফাইল হিসাবে সমস্ত কিছু উপস্থাপন করে, এটি এটি সর্বনিম্ন স্তরে তৈরি করে না। /devস্তরক্রমের বেশিরভাগ ফাইল হ'ল হয় চরিত্র বা ব্লক ডিভাইস, কার্যকরভাবে একটি ডিভাইস ড্রাইভার। তাদের আকার নেই তবে তাদের কাছে একটি বড় এবং গৌণ ডিভাইস নম্বর রয়েছে।

আপনি এগুলি খুললে আপনি কোনও শারীরিক ফাইলের চেয়ে ডিভাইস ড্রাইভারের সাথে সংযুক্ত থাকেন এবং ডিভাইস ড্রাইভারটি পৃথক প্রক্রিয়া পৃথকভাবে পরিচালনা করা উচিত তা জানতে যথেষ্ট স্মার্ট is

লিনাক্স /procফাইল সিস্টেমের ক্ষেত্রেও একই কথা । এগুলি আসল ফাইল নয়, কেবল কার্নেল তথ্যের প্রবেশদ্বারকে শক্তভাবে নিয়ন্ত্রণ করা।


1
আপনার প্রতিক্রিয়া জন্য ধন্যবাদ। আপনি যা বর্ণনা করেছেন সেগুলি থেকে আমি ফাইলগুলির উদ্দেশ্য বুঝতে পারি, তবে আমি আরও একটি স্তর আরও সরানো চাই। আমি যখন এই ফাইলগুলিকে / ডিভ ফোল্ডারে খুলি তখন কীভাবে আসে আমি কখনই কোনও প্রক্রিয়াটির আউটপুট দেখতে পাই না। বলুন যে আমি টার্মিনালে শীর্ষে সম্পাদন করি, এটি কি পর্যায়ক্রমিকভাবে স্টডআউট ফাইলে তার ফলাফল আউটপুট করার কথা নয়, তাই এটি আপডেট হওয়ার পরে আমার এই ফাইলটিতে আউটপুট প্রিন্ট হওয়ার একটি উদাহরণ দেখতে পারা উচিত। তবে এটি তেমন নয় .. সুতরাং এই ফাইলগুলি কি একই নয় (/ dev ডিরেক্টরিতে থাকা ফাইলগুলি)।
শৌভিক

7
কারণ এগুলি প্রযুক্তিগতভাবে ফাইল নয়। এগুলি ডিভাইস নোড, এতে নির্দিষ্ট একটি ডিভাইস নির্দেশ করে। ইউনিক্স আপনার কাছে ফাইল বিমূর্তি হিসাবে সবকিছু উপস্থাপন করতে পারে তবে এটি গভীর স্তরে এটি তৈরি করে না।
প্যাক্সিডিয়াবলো

1
শেল পুনর্নির্দেশের ক্ষমতাটি ব্যবহার করুন। xyz >xyz.outআপনার স্ট্যান্ডার্ড আউটপুটটি কোনও দৈহিক ফাইলে লিখবে যা অন্য প্রক্রিয়াগুলি দ্বারা পড়া যায়। xyz | grep somethingসংযুক্ত করবে xyzstdout- এ grepআরো সরাসরি stdin। আপনি যদি কোনও প্রক্রিয়াতে নিরক্ষিত অ্যাক্সেস চান তবে আপনি সেভাবে নিয়ন্ত্রণ করেন না /proc, কার্নেলটিতে কোনওভাবে ookুকিয়ে আউটপুট ফিল্টার করার জন্য আপনাকে কোড জাতীয় কিছু লিখতে হবে বা লিখতে হবে। অন্যান্য সমাধান হতে পারে তবে এগুলি সম্ভবত একে অপরের মতো বিপজ্জনক :-)
প্যাক্সিডিয়াবলো

20
@ শোভিক, দ্রষ্টব্য যে এটির /dev/stdinজন্য একটি সিমিলিংক /proc/self/fd/0- বর্তমানে চলমান প্রোগ্রামটি খোলে এমন প্রথম ফাইল বিবরণী। সুতরাং, যা দ্বারা ইঙ্গিত করা হয়েছে /dev/stdinতা প্রোগ্রাম থেকে প্রোগ্রামে পরিবর্তিত হবে, কারণ /proc/self/সর্বদা 'বর্তমানে চলমান কর্মসূচি'কে নির্দেশ করে। (যে কোনও প্রোগ্রাম openকল করছে )) /dev/stdinএবং বন্ধুদের সেখানে সেটুয়েড শেল স্ক্রিপ্টগুলি আরও নিরাপদ করার জন্য রাখা হয়েছিল এবং আপনাকে কেবল ফাইলের /dev/stdinসাথে কাজ করে এমন প্রোগ্রামগুলিতে ফাইলের নাম দিন , তবে আপনি আরও ইন্টারেক্টিভভাবে নিয়ন্ত্রণ করতে চান। (কোনও এক দিন এটি আপনার জন্য কার্যকর কৌশল হবে :) :)
sarnold

1
@ কার্লোসডাব্লু.মারকাডো, একটি ফাইল হ'ল ডেটার দৈহিক প্রকাশ। উদাহরণস্বরূপ, হার্ড ডিস্কে বিটস সংরক্ষণ করা হয়েছে। একটি ফাইল হ্যান্ডেল হ'ল (সাধারণত) একবার ফাইলটি খোলার পরে একটি ছোট টোকেন সেই ফাইলটির জন্য ব্যবহৃত হয়।
paxdiablo

62

এটা যে বলে আরো সঠিক হবে stdin, stdoutএবং stderrহল "ইনপুট / আউটপুট স্ট্রীম করে" বরং ফাইল থাকে। যেমন আপনি লক্ষ্য করেছেন, এই সত্ত্বাগুলি ফাইল সিস্টেমে বাস করে না। তবে ইউনিক্স দর্শন, যতদূর আই / ও-র সম্পর্কিত, এটি "সবকিছুই একটি ফাইল"। বাস্তবে, যে সত্যিই মানে আপনি একই গ্রন্থাগার ফাংশন এবং ইন্টারফেস (ব্যবহার করতে পারেন printf, scanf, read, write, select, I / O স্ট্রিম একটি কীবোর্ড, ডিস্ক ফাইল, একটি সকেট একটি নল সাথে সংযুক্ত করা হয় কিনা সম্পর্কে উদ্বেজক ছাড়া, ইত্যাদি), বা অন্য কিছু I / O বিমূর্ততা।

সর্বাধিক প্রোগ্রাম ইনপুট, লেখার আউটপুট, এবং লগ ত্রুটি, তাই পড়া প্রয়োজন stdin, stdoutএবং stderr, আপনি জন্য পূর্বনির্ধারিত হয় একটি প্রোগ্রামিং সুবিধার জন্য। এটি কেবল একটি সম্মেলন, এবং অপারেটিং সিস্টেম দ্বারা প্রয়োগ করা হয় না।


আপনার ইনপুট জন্য ধন্যবাদ। আপনি কি জানবেন কীভাবে আমি কোনও প্রক্রিয়ার আউটপুট ডেটা স্ট্রিমটিকে আটকাতে এবং এটি আমার নিজের একটি ফাইলে আউটপুট করতে পারি?
শৌভিক

51

উপরের উত্তরের পরিপূরক হিসাবে, পুনঃনির্দেশগুলি সম্পর্কে এখানে যোগফল রয়েছে: পুনঃনির্দেশ চিটশিট

সম্পাদনা: এই গ্রাফিকটি পুরোপুরি সঠিক নয় তবে কেন আমি নিশ্চিত নই ...

গ্রাফিক বলছে 2> & 1 এর &> এর মতোই প্রভাব রয়েছে

ls Documents ABC > dirlist 2>&1
#does not give the same output as 
ls Documents ABC > dirlist &>

4
আপনার মন্তব্য গৃহীত উত্তরের সাথে সংমিশ্রণটি নির্ভুলভাবে বোঝায় এবং জিনিসগুলি স্পষ্টভাবে ব্যাখ্যা করে! ধন্যবাদ!
মাইকোলা

1
একটি ছবি হাজার শব্দের সমান !
টাউসফ_কুরিয়াস গুয়

22

আমি ভয় করি আপনার বোঝাপড়াটি পুরোপুরি পিছনে। :)

"স্ট্যান্ডার্ড ইন", "স্ট্যান্ডার্ড আউট", এবং "স্ট্যান্ডার্ড ত্রুটি" প্রোগ্রামটির দৃষ্টিকোণ থেকে, কার্নেলের দৃষ্টিকোণ থেকে নয়।

যখন কোনও প্রোগ্রামের আউটপুট মুদ্রণের প্রয়োজন হয়, তখন এটি সাধারণত "স্ট্যান্ডার্ড আউট" প্রিন্ট করে। একটি প্রোগ্রাম সাধারণত স্ট্যান্ড আউট আউটপুট প্রিন্ট করে printfযা কেবল স্ট্যান্ডার্ড আউট এ প্রিন্ট করে।

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

"স্ট্যান্ডার্ড ইন" ব্যবহার করা হয় যখন ফাইলটি ইনপুট পড়ার প্রয়োজন হয় freadবা ব্যবহার করে fgetsবা getchar

এই ফাইলগুলির যে কোনওটি সহজেই শেল থেকে পুনঃনির্দেশ করা যায় , এর মতো:

cat /etc/passwd > /tmp/out     # redirect cat's standard out to /tmp/foo
cat /nonexistant 2> /tmp/err   # redirect cat's standard error to /tmp/error
cat < /etc/passwd              # redirect cat's standard input to /etc/passwd

বা, পুরো এনচিলদা:

cat < /etc/passwd > /tmp/out 2> /tmp/err

দুটি গুরুত্বপূর্ণ ক্যাভেট রয়েছে: প্রথমটি, "স্ট্যান্ডার্ড ইন", "স্ট্যান্ডার্ড আউট" এবং "স্ট্যান্ডার্ড এর" কেবল একটি সম্মেলন। এগুলি একটি খুব শক্তিশালী কনভেনশন, তবে এটি কেবল একটি চুক্তি যা এই জাতীয় প্রোগ্রামগুলি চালাতে সক্ষম grep echo /etc/services | awk '{print $2;}' | sortহওয়ায় খুব সুন্দর: এবং প্রতিটি প্রোগ্রামের স্ট্যান্ডার্ড আউটপুটগুলি পাইপলাইনে পরবর্তী প্রোগ্রামের স্ট্যান্ডার্ড ইনপুটটিতে জড়িত থাকে।

দ্বিতীয়ত, আমি ফাইল স্ট্রিমের সাথে কাজ করার জন্য স্ট্যান্ডার্ড আইএসও সি ফাংশন দিয়েছি ( FILE *বস্তুগুলি) - কার্নেল স্তরে, এটি সমস্ত ফাইল বর্ণনাকারী ( intফাইল টেবিলের রেফারেন্স) এবং অনেকগুলি নিম্ন-স্তরের ক্রিয়াকলাপ readএবং যেমন writeনা আইএসও সি ফাংশনগুলির খুশি বাফারিং করুন। আমি এটিকে সহজ রাখতে এবং সহজ ফাংশনগুলি ব্যবহার করতে পেরেছি, তবে আমি ভেবেছিলাম যে বিকল্পগুলি আপনার জানা উচিত। :)


প্রক্রিয়াটি কার্যকর করা হচ্ছে এমন কি এটি যখন এই স্ট্যাডার ফাইলটিতে ত্রুটি লিখছে বা প্রোগ্রামটি যখন উত্স থেকে সংকলিত হচ্ছে তখন। এছাড়াও আমরা যখন এই ফাইলগুলি সম্পর্কে সংকলকের দৃষ্টিকোণ থেকে কথা বলি তখন এটি যখন কোনও প্রোগ্রাম বলার সাথে তুলনা করা হয় তার চেয়ে আলাদা?
শৌভিক

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

তথ্যের টোকেনের জন্য ধন্যবাদ। আমি অনুমান করি যে এটি যেভাবেই হোক না কেন এটিকে দৃষ্টিকোণে দেখতে না পারা আমার পক্ষে বেশ বোকা ...: পি
শৌভিক

1
সুতরাং আপনি বলছেন যে স্ট্যান্ডার্ডটি আমাদের প্রোগ্রামটি মুদ্রণ করতে সহায়তা করে
babygame0ver

9

stdin

কনসোলের মাধ্যমে ইনপুট পড়ে (যেমন কীবোর্ড ইনপুট)। স্ক্যানফের সাথে সি ব্যবহার করা হয়

scanf(<formatstring>,<pointer to storage> ...);

stdout- এ

কনসোলে আউটপুট উত্পাদন করে। প্রিন্টফের সাথে সি ব্যবহার করা হয়

printf(<string>, <values to print> ...);

দ্বারা stderr

কনসোলে 'ত্রুটি' আউটপুট উত্পাদন করে। সি এফপ্রিন্টফের সাথে ব্যবহৃত হয়

fprintf(stderr, <string>, <values to print> ...);

ফেরৎ

স্টিডিনের উত্সটি পুনঃনির্দেশিত করা যেতে পারে। উদাহরণস্বরূপ, কীবোর্ড ইনপুট থেকে আসার পরিবর্তে এটি কোনও ফাইল ( echo < file.txt), বা অন্য কোনও প্রোগ্রাম ( ps | grep <userid>) থেকে আসতে পারে ।

Stdout, stderr এর গন্তব্যগুলিও পুনঃনির্দেশিত করা যেতে পারে। উদাহরণস্বরূপ stdout একটি ফাইলে পুনঃনির্দেশ করা যেতে পারে: ls . > ls-output.txtএক্ষেত্রে আউটপুট ফাইলে লেখা হয় ls-output.txtস্ট্যাডার দিয়ে পুনঃনির্দেশ করা যেতে পারে2>


8

আমি মনে করি যে লোকেদের stderrকেবল ত্রুটি বার্তাগুলির জন্য ব্যবহার করা উচিত তা বিভ্রান্তিমূলক।

এটি তথ্যপূর্ণ বার্তাগুলির জন্যও ব্যবহার করা উচিত যা ব্যবহারকারী কমান্ডটি চালাচ্ছে এবং ডেটাগুলির কোনও সম্ভাব্য ডাউনস্ট্রিম গ্রাহকদের জন্য নয় (যেমন আপনি যদি কয়েকটি কমান্ডের শেল পাইপ চালান তবে আপনি "আইটেম 30 এর আইটেম 30 পাওয়ার মতো তথ্যমূলক বার্তা চান না) 42424 "উপস্থিত হওয়ার জন্য stdoutতারা গ্রাহককে বিভ্রান্ত করবে, তবে আপনি এখনও তাদের ব্যবহারকারীকে দেখতে চান।

দেখুন এই ঐতিহাসিক যুক্তিপূর্ণ জন্য:

"সমস্ত প্রোগ্রাম স্ট্যান্ডার্ড আউটপুটটিতে ডায়াগনস্টিকস রেখেছিল the লেপগুলিতে আউটপুটটি পুনর্নির্দেশ করা হলে এটি সর্বদা সমস্যা সৃষ্টি করেছিল, কিন্তু আউটপুটটি একটি অনর্থক প্রক্রিয়ায় প্রেরণ করা হলে অসহনীয় হয়ে পড়েছিল Nevertheless তবুও, স্ট্যান্ডার্ড-ইনপুট- এর সরলতা লঙ্ঘন করতে রাজি নয় স্ট্যান্ডার্ড-আউটপুট মডেল, লোকেরা ভি through এর মাধ্যমে এই পরিস্থিতি সহ্য করেছিল there এর খুব অল্প সময়ের মধ্যেই ডেনিস রিচি স্ট্যান্ডার্ড ত্রুটি-পরিচয় দিয়ে গর্ডিয়ান গিঁট কেটে ফেলেছিল That এটি যথেষ্ট ছিল না pip পাইপলাইনগুলির সাথে ডায়াগনস্টিকগুলি এক সাথে চলমান বেশ কয়েকটি প্রোগ্রাম থেকে আসতে পারে D ডায়াগনস্টিকগুলি প্রয়োজন তাদের সনাক্ত করতে। "


3

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

/ proc / (pid) / fd / 0 - স্ট্যান্ডার্ড আউটপুট ফাইল
/ proc / (pid) / fd / 1 - স্ট্যান্ডার্ড ইনপুট ফাইল
/ proc / (pid) / fd / 2 - স্ট্যান্ডার্ড ত্রুটি ফাইল

উদাহরণ স্বরূপআমার টার্মিনাল উইন্ডো

তবে এটি কেবল / বিন / বাশের জন্য ভাল কাজ করেছে অন্যান্য প্রক্রিয়াগুলিতে সাধারণত 0 তে কিছুই ছিল না তবে অনেকের 2 টিতে ত্রুটি লিখিত ছিল


3

এই ফাইলগুলি সম্পর্কে অনুমোদনের তথ্যের জন্য ম্যান পৃষ্ঠাগুলি পরীক্ষা করে দেখুন, আপনার টার্মিনালে কমান্ডটি চালান।

$ man stdout 

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

স্ট্রাউড একটি স্ট্রিম আউট জন্য

স্ট্রিম ইনপুট জন্য stdin

মুদ্রণ ত্রুটি বা লগ বার্তা জন্য stderr

প্রতিটি ইউনিক্স প্রোগ্রামের প্রতিটি স্ট্রিম রয়েছে।


2

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


0

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

https://www.mkssoftware.com/docs/man5/stdio.5.asp

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