perror() এবং strerror() ফাংশন দুটি Socket Programming এবং অন্যান্য সিস্টেম প্রোগ্রামিংয়ের ক্ষেত্রে ত্রুটি বার্তা প্রদর্শন করার জন্য ব্যবহৃত হয়। এগুলো ত্রুটির উৎস সম্পর্কে বিস্তারিত এবং ব্যবহারযোগ্য তথ্য প্রদান করে, যা ডিবাগিং এবং ত্রুটি শনাক্ত করতে অত্যন্ত সহায়ক। নিচে perror() এবং strerror() ফাংশনের ব্যবহার নিয়ে বিস্তারিত আলোচনা করা হলো।
1. perror()
perror() ফাংশনটি একটি সহজ পদ্ধতি, যা সিস্টেম ত্রুটি (যেমন, সিস্টেম কল বা লাইব্রেরি ফাংশনের ত্রুটি) শনাক্ত করে এবং সঠিক ত্রুটি বার্তা প্রদর্শন করে। এটি errno এর মান ব্যবহার করে কাজ করে এবং বার্তার শেষে ত্রুটির ব্যাখ্যা প্রদান করে।
perror() এর সিগনেচার (C ভাষায়)
void perror(const char *message);
message: ব্যবহারকারীর প্রদত্ত একটি বার্তা, যা ত্রুটির সাথে সম্পর্কিত তথ্য দেয়।- এই বার্তার পরে
perror()errnoএর মান অনুযায়ী সিস্টেম ত্রুটি প্রদর্শন করে।
perror() এর উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <errno.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
exit(EXIT_FAILURE);
}
return 0;
}
- এখানে, যদি Socket তৈরি করতে সমস্যা হয়, তাহলে
perror()ফাংশনSocket creation failed:বার্তা প্রদর্শন করবে এবং এর সাথেerrnoএর মান অনুযায়ী ত্রুটি সম্পর্কে বিস্তারিত তথ্য দেখাবে, যেমন:
Socket creation failed: Address already in useকেন perror() গুরুত্বপূর্ণ:
- এটি ত্রুটির বার্তা সংক্ষিপ্ত এবং স্পষ্টভাবে প্রদর্শন করে, যা দ্রুত সমস্যা শনাক্ত করতে সহায়ক।
- এটি স্বয়ংক্রিয়ভাবে
errnoএর মান পড়ে এবং সিস্টেম ত্রুটির জন্য উপযুক্ত বার্তা প্রদান করে।
2. strerror()
strerror() ফাংশনটি errno ত্রুটি কোডের উপর ভিত্তি করে একটি বিস্তারিত ত্রুটি বার্তা প্রদান করে। এটি একটি স্ট্রিং ফিরিয়ে দেয়, যা ব্যবহারকারী কাস্টম বার্তা বা লগ ফাইলে ব্যবহার করতে পারেন।
strerror() এর সিগনেচার (C ভাষায়)
char *strerror(int errnum);
errnum:errnoত্রুটি কোড বা অন্য কোনো নির্দিষ্ট ত্রুটি কোড।- এটি একটি String ফেরত দেয়, যা ত্রুটির বিস্তারিত ব্যাখ্যা প্রদান করে।
strerror() এর উদাহরণ (C ভাষায়)
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
printf("Error: %s\n", strerror(errno));
exit(EXIT_FAILURE);
}
return 0;
}
- এখানে, যদি Socket তৈরি করতে সমস্যা হয়, তাহলে
strerror(errno)ত্রুটি কোডের উপর ভিত্তি করে একটি String প্রদান করবে, যা ত্রুটির বিস্তারিত তথ্য দেখাবে, যেমন:
Error: Address already in useকেন strerror() গুরুত্বপূর্ণ:
strerror()ব্যবহার করে কাস্টম বার্তা তৈরি করা যায় এবং ত্রুটি লগ ফাইলে সংরক্ষণ করা যায়, যা ডিবাগিং এবং অ্যাপ্লিকেশন মনিটরিংয়ে সহায়ক।- এটি আরও ফ্লেক্সিবল, কারণ এটি
errnoছাড়াও অন্য কোনো ত্রুটি কোডও গ্রহণ করতে পারে, যার ফলে বিভিন্ন পরিস্থিতিতে এটি ব্যবহার করা যায়।
perror() বনাম strerror()
| বৈশিষ্ট্য | perror() | strerror() |
|---|---|---|
| ব্যবহার | ত্রুটি বার্তা সরাসরি প্রিন্ট করে। | ত্রুটির জন্য একটি String ফেরত দেয়। |
| ইনপুট | ব্যবহারকারীর প্রদত্ত বার্তা এবং errno। | errno বা নির্দিষ্ট ত্রুটি কোড। |
| ফ্লেক্সিবিলিটি | সরাসরি প্রিন্টিং এর জন্য সহজ। | কাস্টম বার্তা বা লগিংয়ের জন্য ব্যবহারযোগ্য। |
| ফর্ম্যাট | message: system error message | কেবল সিস্টেম ত্রুটির বার্তা ফিরিয়ে দেয়। |
perror() এবং strerror() একত্রে ব্যবহার করার উদাহরণ
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
void log_error(const char *message) {
FILE *logfile = fopen("error_log.txt", "a");
if (logfile) {
fprintf(logfile, "%s: %s\n", message, strerror(errno));
fclose(logfile);
}
}
int main() {
int sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
perror("Socket creation failed");
log_error("Socket creation failed");
exit(EXIT_FAILURE);
}
return 0;
}
- এই উদাহরণে,
perror()সরাসরি ত্রুটি বার্তা প্রদর্শন করে, এবংstrerror()একটি String ফিরিয়ে দিয়ে ত্রুটি বার্তা লগ ফাইলে সংরক্ষণ করে। এটি ত্রুটি চেকিং এবং লগিংয়ের জন্য একটি কার্যকর পদ্ধতি।
Read more