কম্পিউটার

ইনপুট ও আউটপুট (IO) রুবিতে:দ্য ডেফিনিটিভ গাইড

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 স্ট্রীম।

ইনপুট ও আউটপুট (IO) রুবিতে:দ্য ডেফিনিটিভ গাইড

আপনার ভালো লাগলে এই নিবন্ধটি শেয়ার করতে ভুলবেন না৷

পড়ার জন্য ধন্যবাদ।


  1. পরিবেশের ভেরিয়েবলের জন্য রুবিস্ট গাইড

  2. রুবি বিকাশকারীদের জন্য সময় জটিলতার নির্দিষ্ট গাইড

  3. রুবিতে কার্যকরী প্রোগ্রামিং (সম্পূর্ণ নির্দেশিকা)

  4. রুবি গণনাযোগ্য মডিউলের একটি প্রাথমিক নির্দেশিকা (+ আমার প্রিয় পদ্ধতি)