I/O মানে ইনপুট/আউটপুট।
ইনপুট দ্বারা আমরা বুঝি যে সমস্ত ডেটা এবং তথ্য যা কিছুতে আসে (কম্পিউটার, রুবি পদ্ধতি, আপনার মস্তিষ্ক)।
ইনপুটের উদাহরণ :
- কীবোর্ডে আপনার প্রেস কী
- মাউস ক্লিক
- আপনার পড়া বই
আউটপুট বলতে আমরা বোঝাই যে ইনপুটের ফলে যা বের হয়।
আউটপুটের উদাহরণ :
- 1 + 1 এর ফলাফল
- আপনার পড়া একটি নিবন্ধের সারসংক্ষেপ লেখা
- কফি
রুবিতে, যখন আমরা i/o সম্পর্কে কথা বলি তখন আমরা সাধারণত ফাইল পড়া, নেটওয়ার্ক সকেটের সাথে কাজ করা এবং স্ক্রিনে তথ্য মুদ্রণ করার কথা বলি।
IO ক্লাস বোঝা
IO রুবিতেও একটি ক্লাস।
এটি File
এর মত অন্যান্য অবজেক্টের জন্য প্যারেন্ট ক্লাস &Socket
.
সমস্ত IO অবজেক্টের এই ক্রিয়াকলাপ রয়েছে :
- খোলা/বন্ধ
- পড়ুন
- লিখুন
IO অবজেক্টগুলি ফাইল বর্ণনাকারীর উপর ভিত্তি করে .
আপনার কম্পিউটারে চলমান প্রতিটি প্রক্রিয়ার একটি অভ্যন্তরীণ তথ্য টেবিল রয়েছে৷
এই টেবিলের অংশে ফাইল বর্ণনাকারীর একটি তালিকা রয়েছে৷
৷একটি ফাইল বর্ণনাকারী হল একটি পূর্ণসংখ্যা এবং একটি ফাইলের নামের মধ্যে একটি ম্যাপিং৷ .
আপনি লিনাক্সে ফাইল বর্ণনাকারীর এই তালিকা দেখতে পারেন।
এই কমান্ডের সাথে :
# Assuming you have irb open on another window ls -lh /proc/`pgrep irb`/fd/ # lrwx------ 1 jesus jesus 64 Feb 3 15:54 0 -> /dev/pts/3 # lrwx------ 1 jesus jesus 64 Feb 3 15:54 1 -> /dev/pts/3 # lrwx------ 1 jesus jesus 64 Feb 3 15:54 2 -> /dev/pts/3
আপনি sysopen
দিয়ে রুবিতে একটি নতুন ফাইল বর্ণনাকারী তৈরি করতে পারেন পদ্ধতি।
উদাহরণ :
fd = IO.sysopen('/dev/null', 'w') # 10
এখন আপনি এই ফাইল বর্ণনাকারী (10
) দিয়ে একটি যোগাযোগ চ্যানেল খুলতে পারেন )।
এরকম :
io = IO.new(fd)
এবং এটিতে লিখুন :
io << 'orange'
লক্ষ্য করুন যে IO
আপনার ফাইল বর্ণনাকারী একটি প্রকৃত ফাইল, একটি ডিভাইস (যেমন একটি হার্ড ডিস্ক), বা একটি নেটওয়ার্ক সকেট ম্যাপ করে কিনা তা চিন্তা করে না৷
লেখার জন্য একটি ফাইল বর্ণনাকারী কিভাবে খুলবেন
যখন আপনি sysopen
ব্যবহার করে একটি নতুন ফাইল বর্ণনাকারী তৈরি করেন , অথবা File.open
ব্যবহার করে একটি ফাইল খুলুন , আপনার কাছে কয়েকটি বিকল্প আছে।
ডিফল্টরূপে যোগাযোগ শুধুমাত্র পঠনযোগ্য।
আপনি একটি মোড নির্দিষ্ট করতে পারেন :
r
(পড়ুন, ডিফল্ট)w
(লিখুন)w+
(পড়ুন এবং লিখুন)a
(সংযোজন)
উদাহরণ :
fd = IO.sysopen('/dev/tty1', 'w+')
এটি /dev/tty1
খোলে রিড + রাইট মোড সহ।
3 স্ট্যান্ডার্ড IO স্ট্রীম
আপনি যখন একটি নতুন প্রোগ্রাম (আপনার সম্পাদক, টার্মিনাল, রুবি দোভাষী, ইত্যাদি) খোলেন তখন এটি ডিফল্টরূপে যোগাযোগের 3টি চ্যানেল খোলে৷
3 ফাইল বর্ণনাকারী।
তারা হল :
- stdin (ইনপুট)
- stdout (আউটপুট)
- stderr (ত্রুটি)
রুবিতে আপনি তাদের ধ্রুবক ফর্ম বা তাদের বৈশ্বিক পরিবর্তনশীল ফর্ম ব্যবহার করে সরাসরি এগুলি অ্যাক্সেস করতে পারেন৷
উদাহরণ :
$stdout << "abc\n"
যখন আপনি $stdout
এ লিখবেন , এটা পুট পদ্ধতি কল করার মতই।
স্ট্যান্ডার্ড আউটপুট আপনার টার্মিনালের সাথে যুক্ত৷
lrwx------ 1 jesus jesus 64 Feb 3 15:54 0 -> /dev/pts/3
এই /dev/pts/3
একটি ভার্চুয়াল ডিভাইস যা থেকে আপনার টার্মিনাল পাঠ করে স্ক্রিনে পাঠ্য প্রদর্শন করতে।
মানক ত্রুটি৷ আউটপুটের জন্যও ব্যবহার করা হয়, কিন্তু এটি আপনার টার্মিনালকে এই বিষয়বস্তুটিকে ভিন্নভাবে উপস্থাপন করার সুযোগ দেয়, যেমন একটি বড় ফন্টে, বা নিয়মিত পাঠ্যের চেয়ে ভিন্ন রঙে৷
আপনি warn
ব্যবহার করতে পারেন স্ট্যান্ডার্ড ত্রুটিতে প্রিন্ট করার পদ্ধতি।
স্ট্যান্ডার্ড ইনপুট যেখানে ব্যবহারকারীর ইনপুট পড়া হয়।
আপনি gets
ব্যবহার করতে পারেন স্ট্যান্ডার্ড ইনপুট থেকে পড়ার পদ্ধতি।
কিভাবে STDOUT ফ্লাশ করবেন এবং বাফারিং নিষ্ক্রিয় করবেন
IO বস্তুর একটি অভ্যন্তরীণ বাফার আছে।
একটি নির্দিষ্ট পরিমাণ ইনপুট ডেটা পড়ার আগে সংরক্ষণ করা হবে৷ .
তাই মাঝে মাঝে আপনি puts
ব্যবহার করেন ...
কিন্তু প্রোগ্রাম শেষ না হওয়া পর্যন্ত বা বাফার পূর্ণ না হওয়া পর্যন্ত আপনি কিছুই দেখতে পাবেন না!
আপনি এভাবে বাফারিং অক্ষম করতে পারেন৷ :
$stdout.sync = true
অথবা আপনি ম্যানুয়ালি বাফার ফ্লাশ করতে পারেন :
$stdout.flush
বাফার নিষ্ক্রিয় হলে আপনি অপেক্ষা না করেই আউটপুট দেখতে পাবেন।
খণ্ডে পড়া
আপনি যখন একটি IO অবজেক্ট থেকে পড়ছেন, আপনি read
একটি END-OF-FILE (EOF) সংকেত দিয়ে স্ট্রীম শেষ না হওয়া পর্যন্ত, স্ট্রীমটি বন্ধ হয়ে যায়, অথবা আপনি একটি নির্দিষ্ট পরিমাণ বাইট পাবেন৷
নেটওয়ার্ক প্রোগ্রামিং এবং বড় ফাইলের জন্য, ছোট অংশে পড়া সহায়ক।
আপনি এইরকম খণ্ডে পড়তে পারেন :
data = "" until io.eof? data << io.read(2048) end
এই কোডের মাধ্যমে আপনি ডেটা উপলব্ধ হওয়ার সাথে সাথে প্রক্রিয়া করতে পারেন, সম্পূর্ণ ডাউনলোড শেষ হওয়ার জন্য অপেক্ষা না করে।
লক্ষ্য করুন যে eof?
"ব্লক" করবে।
ব্লক করার অর্থ হল আপনার কোড স্লিপ পর্যন্ত যাবে অপারেটিং সিস্টেম ইঙ্গিত দেয় যে নতুন ডেটা পড়তে হবে৷ .
টু-ওয়ে কমিউনিকেশনের জন্য কিভাবে IO পাইপ ব্যবহার করবেন
রুবি আপনাকে পাইপ তৈরি করতে দেয়।
একটি পাইপ হল এক জোড়া ফাইল বর্ণনাকারী যা একে অপরের সাথে সংযুক্ত।
এটি ইন্টার-প্রসেস কমিউনিকেশন (IPC) এর জন্য ব্যবহৃত হয়।
উদাহরণ :
read, write = IO.pipe
আপনি এটি fork
দিয়ে ব্যবহার করতে পারেন বর্তমান প্রক্রিয়ার একটি অনুলিপি তৈরি করতে পদ্ধতি (উইন্ডোজে উপলব্ধ নয়)।
এই দুটি প্রক্রিয়া পাইপ ব্যবহার করে যোগাযোগ করতে পারে।
উদাহরণ :
if fork write.close puts "Message received: #{read.gets}" read.close else read.close write << "Buy some bananas!" write.close end
যার ফলাফল :
# Message received: Buy some bananas!
কিভাবে কার্নেল ওপেন মেথড ব্যবহার করবেন
রুবির একটি খুব নমনীয় open
আছে পদ্ধতি।
এটি আপনাকে ফাইলগুলি খুলতে এবং একটি URL থেকে ডেটা পড়তে এবং এমনকি বহিরাগত কমান্ড চালানোর জন্য পাইপগুলি খুলতে দেয়৷
উদাহরণ :
open "abc.txt"
এই কারণেই এই পদ্ধতিটি এড়ানো উচিত .
এটি একটি নিরাপত্তা ঝুঁকি যে এটি এই সমস্ত জিনিস করতে পারে৷
পরিবর্তে, নির্দিষ্ট open
ব্যবহার করা ভাল পদ্ধতি যা আপনার প্রয়োজন।
উদাহরণ :
File.open # File IO.popen # Process open URI.parse(...).open # URL open
এই সব একটি IO
প্রদান করে বস্তু।
সারাংশ
আপনি রুবিতে ইনপুট/আউটপুট সম্পর্কে শিখেছেন! আপনি ফাইল বর্ণনাকারী, IO
সম্পর্কে শিখেছেন ক্লাস, বাফারিং, খণ্ডে পড়া এবং স্ট্যান্ডার্ড IO
স্ট্রীম।
আপনার ভালো লাগলে এই নিবন্ধটি শেয়ার করতে ভুলবেন না৷
৷পড়ার জন্য ধন্যবাদ।