আমি ভয় করি আপনার বোঝাপড়াটি পুরোপুরি পিছনে। :)
"স্ট্যান্ডার্ড ইন", "স্ট্যান্ডার্ড আউট", এবং "স্ট্যান্ডার্ড ত্রুটি" প্রোগ্রামটির দৃষ্টিকোণ থেকে, কার্নেলের দৃষ্টিকোণ থেকে নয়।
যখন কোনও প্রোগ্রামের আউটপুট মুদ্রণের প্রয়োজন হয়, তখন এটি সাধারণত "স্ট্যান্ডার্ড আউট" প্রিন্ট করে। একটি প্রোগ্রাম সাধারণত স্ট্যান্ড আউট আউটপুট প্রিন্ট করে 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
না আইএসও সি ফাংশনগুলির খুশি বাফারিং করুন। আমি এটিকে সহজ রাখতে এবং সহজ ফাংশনগুলি ব্যবহার করতে পেরেছি, তবে আমি ভেবেছিলাম যে বিকল্পগুলি আপনার জানা উচিত। :)