errno.h এর ধারণা এবং এর প্রয়োজনীয়তা
errno.h হেডার ফাইলটি সি প্রোগ্রামিং ভাষায় ত্রুটি নির্দেশক (error handling) ব্যবস্থাপনার জন্য ব্যবহৃত হয়। এটি ত্রুটি ঘটলে, সেই ত্রুটির কোড (error code) বা সংখ্যাগত মানকে ধরে রাখে, যা ত্রুটির ধরন সম্পর্কে তথ্য প্রদান করে। যখন একটি ফাংশন সফলভাবে কাজ করতে ব্যর্থ হয়, তখন errno ভেরিয়েবলে একটি নির্দিষ্ট ত্রুটি কোড সেট করা হয়। প্রোগ্রামাররা এই কোড চেক করে নির্ধারণ করতে পারেন ত্রুটির প্রকৃতি কী এবং সেই অনুযায়ী প্রয়োজনীয় পদক্ষেপ নিতে পারেন।
errno.h এর প্রয়োজনীয়তা
১. ত্রুটি পরিচালনা সহজ করে: errno.h এর মাধ্যমে ত্রুটি চিহ্নিত ও ব্যাখ্যা করা সহজ হয়। প্রোগ্রামিংয়ে অনেক ফাংশন (যেমন fopen(), malloc(), ইত্যাদি) যখন নির্দিষ্ট কারণে সফলভাবে কাজ করতে ব্যর্থ হয়, তখন errno ব্যবহার করে ত্রুটির কারণ নির্ধারণ করা সম্ভব।
২. ডিবাগিং সহজ করে: ত্রুটির কোড দেখিয়ে errno.h প্রোগ্রাম ডিবাগ করার ক্ষেত্রে সহায়ক হয়। কোডের কোথায় কোন ত্রুটি ঘটেছে এবং তার কারণ কী, তা দ্রুত নির্ধারণ করা যায়।
৩. উন্নত ব্যবহারকারীর প্রতিক্রিয়া: ত্রুটির ধরন অনুযায়ী ব্যবহারকারীকে উপযুক্ত বার্তা দেখানো যায়। যেমন, ফাইল না পাওয়া গেলে "File not found" বার্তা দেখানো যেতে পারে।
errno এর সাধারণ ব্যবহৃত ত্রুটি কোডসমূহ
errno.h এ কিছু পূর্বনির্ধারিত ত্রুটি কোড রয়েছে, যা বিভিন্ন ধরনের ত্রুটি নির্দেশ করে। নিচে কিছু সাধারণ ত্রুটি কোডের তালিকা এবং তাদের ব্যাখ্যা দেওয়া হলো:
| ত্রুটি কোড | অর্থ | ব্যাখ্যা |
|---|---|---|
EACCES | Permission denied | ফাইলে অ্যাক্সেস করার অনুমতি নেই |
ENOENT | No such file or directory | নির্দিষ্ট ফাইল বা ডিরেক্টরি পাওয়া যায়নি |
ENOMEM | Out of memory | পর্যাপ্ত মেমোরি নেই |
EIO | Input/output error | ইনপুট/আউটপুট অপারেশনে ত্রুটি |
EBADF | Bad file descriptor | অবৈধ ফাইল ডেসক্রিপ্টর |
EINVAL | Invalid argument | অবৈধ আর্গুমেন্ট দেওয়া হয়েছে |
ERANGE | Result too large | ফলাফল অত্যন্ত বড় এবং এটি ব্যবহারের সীমা ছাড়িয়ে গেছে |
EPERM | Operation not permitted | অননুমোদিত অপারেশন |
EAGAIN | Resource temporarily unavailable | অস্থায়ীভাবে রিসোর্স পাওয়া যাচ্ছে না |
errno এর ব্যবহার
errno হলো একটি গ্লোবাল ইন্টিজার ভেরিয়েবল যা ত্রুটি কোড সংরক্ষণ করে। যখন কোনো ফাংশন ত্রুটি ঘটায়, তখন errno ত্রুটির ধরন নির্ধারণ করতে সহায়ক হয়। errno চেক করতে errno.h হেডার ফাইলটি ইনক্লুড করতে হয় এবং ত্রুটি কোড ব্যাখ্যা করার জন্য strerror() ফাংশন ব্যবহার করা যেতে পারে।
উদাহরণ: fopen() ফাংশনে errno এর ব্যবহার
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
FILE *file;
// "nonexistent.txt" নামের ফাইলটি খোলার চেষ্টা
file = fopen("nonexistent.txt", "r");
if (file == NULL) {
printf("Error opening file: %s\n", strerror(errno));
return 1;
}
fclose(file);
return 0;
}এখানে, যদি
"nonexistent.txt"ফাইলটি বিদ্যমান না থাকে, তবেerrnoতেENOENTত্রুটি কোড সেট করা হবে, এবংstrerror()এর মাধ্যমে ত্রুটির বিবরণ দেখানো হবে: **"No such file or directory"**।
strerror() ফাংশন
strerror() ফাংশনটি errno ত্রুটি কোডকে একটি ব্যাখ্যামূলক স্ট্রিংয়ে রূপান্তর করে। এটি ত্রুটির সংখ্যা অনুযায়ী একটি ব্যাখ্যামূলক বার্তা প্রদান করে, যা ডিবাগিং এবং ত্রুটি সংশোধনে সহায়ক।
সিঙ্কট্যাক্স:
char *strerror(int errnum);উদাহরণ:
#include <stdio.h>
#include <errno.h>
#include <string.h>
int main() {
errno = EACCES; // অনুমতি সংক্রান্ত ত্রুটি কোড সেট
printf("Error: %s\n", strerror(errno)); // ত্রুটির ব্যাখ্যা প্রদর্শন
return 0;
}perror() ফাংশন
perror() ফাংশনটি একটি ব্যাখ্যামূলক ত্রুটি বার্তা প্রদর্শন করে, যেখানে errno সেট করা ত্রুটি কোডের মানের উপর ভিত্তি করে বার্তা দেখানো হয়।
সিঙ্কট্যাক্স:
void perror(const char *s);উদাহরণ:
#include <stdio.h>
#include <errno.h>
int main() {
FILE *file = fopen("nonexistent.txt", "r");
if (file == NULL) {
perror("Error opening file"); // ত্রুটি বার্তা প্রদর্শন
return 1;
}
fclose(file);
return 0;
}এখানে, যদি
"nonexistent.txt"ফাইলটি বিদ্যমান না থাকে, তবেperror()ত্রুটি বার্তা দেখাবে: **"Error opening file: No such file or directory"**।
সারসংক্ষেপ
errno.h হেডার ফাইলটি সি প্রোগ্রামিংয়ে ত্রুটি পরিচালনার জন্য অপরিহার্য। errno ভেরিয়েবল এবং strerror() ও perror() ফাংশন ব্যবহার করে প্রোগ্রামের ত্রুটি সম্পর্কে নির্দিষ্ট তথ্য পাওয়া যায়। এটি প্রোগ্রাম ডিবাগ এবং ব্যবহারকারীর জন্য উন্নত ত্রুটি বার্তা প্রদান করতে সহায়ক।
Read more