সি ল্যাঙ্গুয়েজে বেশ কিছু ফাংশন আছে যা ফাইল পড়ার অনুমতি দেয়, সবচেয়ে বেশি ব্যবহৃত হয় read() এবং fread() ফাংশন। এই ভাষাটি গেটচার().
এর মতো ফাংশন সহ অক্ষর দ্বারা অক্ষর পড়ার পদ্ধতিও সরবরাহ করেফাইল প্রসেসিং ফাংশন, তাদের কল পদ্ধতি, ইনপুট এবং আউটপুট আর্গুমেন্ট ইত্যাদিকে সাবলীলভাবে ব্যবহার করার জন্য জানা গুরুত্বপূর্ণ কারণ তারা সিস্টেমে সংরক্ষিত তথ্য সংরক্ষণ এবং নিষ্পত্তি করার জন্য প্রোগ্রামারের কাছে উপলব্ধ সংস্থান।
এই লিনাক্সহিন্ট নিবন্ধে, আপনি ফাইলগুলি পড়ার জন্য read() ফাংশনটি কীভাবে ব্যবহার করবেন তা শিখবেন।
আমরা এই এলা, এর সিনট্যাক্স, মেথড কল, ইনপুট এবং আউটপুট আর্গুমেন্ট, তারা যে ধরনের ডেটা গ্রহণ করে এবং কীভাবে সেগুলি সঠিকভাবে ঘোষণা করতে হয় সে সম্পর্কে সবকিছু ব্যাখ্যা করব।
তারপরে আমরা এই বৈশিষ্ট্যটির ব্যবহারকে ব্যবহারিক উদাহরণে রেখে যা শিখেছি তা প্রয়োগ করি।
কিভাবে read() ফাংশনটি ব্যবহার করতে হয় সে সম্পর্কে আপনার সম্পূর্ণ সচেতন হওয়ার জন্য, আমরা একটি বিশেষ বিভাগ যুক্ত করেছি যা এই ফাংশনটি ব্যবহার করার সময় যে সমস্ত ত্রুটি ঘটতে পারে, সেইসাথে তাদের সনাক্তকরণ এবং সনাক্তকরণের বর্ণনা দেয়, যাতে আপনার কাছে একটি ত্রুটির ক্ষেত্রে দ্রুত সমাধানের জন্য প্রয়োজনীয় কৌশলগুলি থাকে৷
সি ল্যাঙ্গুয়েজে রিড() ফাংশনের সিনট্যাক্স
size_t read(int fd, void *buf, size_t count);
রিড() ফাংশনের বর্ণনা
read() ফাংশনটি ওপেন ফাইলের বিষয়বস্তু পড়ে যা "fd" ইনপুট আর্গুমেন্টে তার বর্ণনাকারী দ্বারা নির্দিষ্ট করা হয়। এই ফাংশনটি ফাইলের বিষয়বস্তুগুলিকে বাফারে পাঠ করে এবং কপি করে যা "বাফ" দ্বারা নির্দেশিত হয় বাইট সংখ্যার সাথে। "fd" শনাক্তকারী হল একটি পূর্ণসংখ্যা যা ফাইলটি খোলার সময় open() ফাংশনের ফলাফল হিসাবে ফিরে আসে৷
read() ফাংশন সফলভাবে রিটার্ন করলে, এটি পড়া বাইট সংখ্যা ফেরত দেয়। 0 এর সমান ফলাফলের মানে হল যে ফাইলটি শেষ পর্যন্ত পড়া হয়েছে এবং -1 মানে একটি ত্রুটি ঘটেছে৷
গ্লোবাল "errno" ভেরিয়েবল থেকে এর কোড পুনরুদ্ধার করে নির্দিষ্ট ত্রুটি সনাক্ত করা যেতে পারে। পরে, আপনি একটি বিভাগ পাবেন যা read() ফাংশন ব্যবহার করার সময় যে ত্রুটিগুলি ঘটতে পারে এবং সেগুলি সনাক্ত ও সনাক্ত করার কৌশলগুলি বর্ণনা করে৷
read() ফাংশনটি "unistd.h" হেডারে ঘোষণা করা হয়েছে। এটি ব্যবহার করতে, আপনাকে অবশ্যই এই ফাইলটি আপনার কোডে এইভাবে অন্তর্ভুক্ত করতে হবে:
Read() ফাংশন সহ একটি ফাইল কীভাবে পড়তে হয়
এই উদাহরণে, আমরা ব্যাখ্যা করব কিভাবে open() এবং read() ফাংশন ব্যবহার করে একটি ফাইল খুলতে এবং পড়তে হয়।
এই উদ্দেশ্যে, আমরা আগে লিনাক্স ম্যানেজারের মাধ্যমে "example.txt" নামের একটি টেক্সট ফাইল তৈরি করেছিলাম এবং এটিকে "ডকুমেন্টস" ডিরেক্টরিতে সংরক্ষণ করেছিলাম। তারপর, আমরা এটিতে এই নিবন্ধের প্রথম অনুচ্ছেদ লিখেছিলাম।
ফাইলটি পড়ার জন্য কোড তৈরির প্রথম ধাপ হল প্রয়োজনীয় হেডার অন্তর্ভুক্ত করা এবং একটি main() ফাংশন তৈরি করা যা একটি খালি মান প্রদান করে। আমরা এটিতে "fd" পূর্ণসংখ্যা সংজ্ঞায়িত করি যা ফাইল বর্ণনাকারী হিসাবে কাজ করে, একটি 1024 অক্ষর বাফার যাকে "buff" বলা হয় যেখানে read() দ্বারা পড়া তথ্য সংরক্ষণ করা হয়। অ্যারে পাথ পাথ এবং ফাইলের নাম সংরক্ষণ করে যা আমরা পড়তে চাই।
প্রয়োজনীয় ভেরিয়েবল সংজ্ঞায়িত করার পর, আমরা ফাইলটি খুলতে open() ফাংশনকে কল করি। আমরা প্রথম ইনপুট আর্গুমেন্ট হিসাবে ফাইলের পাথ এবং নামের সাথে পাথ অ্যারে পাস করে এবং দ্বিতীয় আর্গুমেন্ট হিসাবে O_RDONLY পতাকা নির্দিষ্ট করে এই ফাংশনটিকে কল করি। আউটপুট আর্গুমেন্ট হিসাবে, আমরা "fd" পূর্ণসংখ্যা পাস করি যেখানে open() বর্ণনাকারীটি ফেরত দেয় যা আমরা ফাইলে পড়ার জন্য ব্যবহার করি।
একবার আমরা ফাইলটি ওপেন করলে, আমরা read() ফাংশনকে কল করে এবং open() ফাংশন দ্বারা ফেরত দেওয়া প্রথম আর্গুমেন্ট হিসাবে "fd" বর্ণনাকারীকে পাস করে এর বিষয়বস্তু পড়ি। দ্বিতীয় যুক্তি হিসাবে, আমরা পয়েন্টারটিকে "বাফ" বাফারে প্রেরণ করি যেখানে আমরা পড়ার বিষয়বস্তু সংরক্ষণ করি এবং অবশেষে বাফারের আকার যা এই ক্ষেত্রে 1024 বাইট।
তারপর আমরা কমান্ড কনসোলে বাফে সংরক্ষিত বিষয়বস্তু প্রদর্শন করতে printf() ফাংশন ব্যবহার করি। এই উদাহরণের জন্য সম্পূর্ণ কোড এখানে:
# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত করুন
#include
#include
int main()
{
int fd;
চর বাফ [1024];
char path[] ="ডকুমেন্টস/example.txt";
fd =open(path, O_RDONLY);
পড়ুন(fd, buff, 1024);
printf("\n\n%s\n\n", বাফ);
নিম্নলিখিত চিত্রে, আমরা এই কোডের সংকলন এবং সম্পাদন দেখতে পাচ্ছি। আমরা দেখতে পাচ্ছি, read() “example.txt” ফাইলের সম্পূর্ণ বিষয়বস্তুকে “buff”-এ রাখে এবং printf() ফাংশন কমান্ড কনসোলে প্রিন্ট করে:

রিড() ফাংশন ব্যবহার করার সময় ঘটতে পারে এমন ত্রুটিগুলি কীভাবে সনাক্ত এবং সনাক্ত করতে হয়
read() ব্যবহার করে বিভিন্ন ত্রুটি হতে পারে। যখন এটি ঘটে, এই ফাংশনটি -1 এর সমান ফলাফল প্রদান করে।
একটি ত্রুটি ঘটেছে কিনা তা নির্ধারণ করার সবচেয়ে সহজ উপায় হল একটি "if" শর্ত ব্যবহার করা যেখানে শর্তটি -1 এর রিটার্ন মান। এখন, আসুন দেখি কোন ত্রুটি ঘটেছে কিনা তা নির্ধারণ করতে আপনি কীভাবে এই পদ্ধতিটি ব্যবহার করতে পারেন:
int n;
n =পড়ুন(fd, buff , 1024);
যদি ( n ==-1){
printf ("ফাইলটি পড়ার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে।");
যদি read() ফাংশনটি একটি ত্রুটির সাথে ফিরে আসে, এটি "if" স্টেটমেন্টে রূপান্তরিত হয় এবং "ফাইলটি পড়ার চেষ্টা করার সময় একটি ত্রুটি ঘটেছে" বার্তাটি প্রিন্ট করে।
যখন একটি ত্রুটি ঘটে, একটি সংখ্যাসূচক কোড স্বয়ংক্রিয়ভাবে বিশ্বব্যাপী "errno" ভেরিয়েবলে সংরক্ষণ করা হয় যা "errno.h" শিরোনামে সংজ্ঞায়িত করা হয়। এই কোডটি যে ত্রুটিটি ঘটেছে তা সনাক্ত করতে ব্যবহার করা যেতে পারে।
নিম্নলিখিত ত্রুটিগুলির একটি উদ্ধৃতি যা read() ফাংশন তৈরি করতে পারে এবং যা প্রতিটি ত্রুটির একটি সংক্ষিপ্ত বিবরণ এবং সংশ্লিষ্ট পূর্ণসংখ্যা মান সহ "errno.h" শিরোনামে সংজ্ঞায়িত করা হয়েছে:
errno-এ DefinitionValue ত্রুটিEAGAIN 11 আবার চেষ্টা করুনEBADF৷ 9ভুল ফাইল নম্বরEDESTADDRREQ 89গন্তব্য ঠিকানা প্রয়োজনEFAULT 14ভুল ঠিকানাEFBIG 27ফাইল অনেক বড়EINTR 4সিস্টেম কল বাধাপ্রাপ্তEINVAL৷ 22অবৈধ যুক্তিEIO 5 I/O ত্রুটিEPERM 1 অপারেশন অনুমোদিত নয়একটি ত্রুটি সনাক্ত করার সবচেয়ে সহজ উপায় হল একটি সুইচ খোলা যেখানে "errno" ভেরিয়েবল হল জাম্প কন্ডিশন এবং প্রতিটি ক্ষেত্রে একটি ত্রুটি সংজ্ঞা।
এর পরে, আসুন একটি উদাহরণ দেখি যেখানে আমরা একটি নেতিবাচক চিহ্ন সহ একটি বর্ণনাকারী প্রবেশ করার চেষ্টা করি, যার ফলে একটি ত্রুটি দেখা দেয়। একটি ত্রুটি সনাক্ত করতে, আমরা "যদি" শর্তটি ব্যবহার করি যা আমরা আগের স্নিপেটে দেখেছি। এটি সনাক্ত করতে, এই ফাংশনটি তৈরি করতে পারে এমন তিনটি সবচেয়ে সাধারণ ত্রুটি সহ আমরা একটি সুইচ খুলি৷
# অন্তর্ভুক্ত করুন
# অন্তর্ভুক্ত করুন
#include
# অন্তর্ভুক্ত
#include
int main()
{
int fd,n;
চর বাফ [1024];
char path[] ="ডকুমেন্টস/example.txt";
fd =open(path, O_RDONLY);
n =পড়ুন(99999999, বাফ, 1024);
যদি (n ==-1){
সুইচ (ভুল){
কেস EBADF:{
printf("খারাপ ফাইল নম্বর। ত্রুটি:%i\n", errno);
বিরতি;}
ক্ষেত্রে EINVAL:{
printf("অবৈধ যুক্তি। ত্রুটি:%i\n", errno);
বিরতি;}
কেস EIO:{
printf("I/O ত্রুটি। ত্রুটি:%i\n", ত্রুটি);
বিরতি;}
}
}
আমরা নিচের চিত্রে দেখতে পাচ্ছি, রিড() ফাংশনটি একটি ত্রুটি প্রদান করে যখন একটি ইনপুট আর্গুমেন্ট হিসেবে একটি অবৈধ বর্ণনাকারীকে পাস করা হয় এবং যে মানটি "errno" ভেরিয়েবল থেকে পুনরুদ্ধার করা হয় যা একটি জাম্প কন্ডিশন হিসেবে ব্যবহার করা হয় তা আমাদের EBADF ক্ষেত্রে প্রবেশ করার সময় ত্রুটি সনাক্ত করতে দেয়৷

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