স্ট্যাট সিস্টেম কল লিনাক্স টিউটোরিয়াল

Stat System Call Linux Tutorial



লিনাক্স কার্নেল দ্বারা প্রদত্ত সিস্টেম কলগুলি glibc এর মাধ্যমে C প্রোগ্রামিং ভাষায় প্রকাশ করা হয়। যখন একটি সিস্টেম কল ব্যবহার করা হয়, আপনি OS- এর সাথে যোগাযোগ করছেন এবং ফিরে আসার সময় OS আপনাকে সেই প্যারামিটারগুলির মাধ্যমে যোগাযোগ করে যা সিস্টেম কল ফাংশন (রিটার্ন ভ্যালু) -এ ফেরত আসে।

স্ট্যাট সিস্টেম কল:

স্ট্যাট সিস্টেম কল হল লিনাক্সে একটি সিস্টেম কল যা একটি ফাইলের অবস্থা পরীক্ষা করে যেমন ফাইলটি কখন অ্যাক্সেস করা হয়েছিল তা পরীক্ষা করে। স্ট্যাট () সিস্টেম কল আসলে ফাইলের বৈশিষ্ট্য প্রদান করে। একটি ইনোডের ফাইলের বৈশিষ্ট্যগুলি মূলত Stat () ফাংশন দ্বারা ফেরত দেওয়া হয়। একটি ইনোড ফাইলের মেটাডেটা ধারণ করে। একটি ইনোড রয়েছে: ফাইলের ধরন, ফাইলের আকার, যখন ফাইলটি অ্যাক্সেস করা হয়েছিল (পরিবর্তিত, মুছে ফেলা হয়েছে) যা টাইম স্ট্যাম্প এবং ফাইলের পথ, ইউজার আইডি এবং গ্রুপ আইডি, ফাইলের লিঙ্ক , এবং ফাইলের বিষয়বস্তুর প্রকৃত ঠিকানা।







আমরা বলতে পারি যে ইনোডে স্ট্যাট () সিস্টেম কলের জন্য প্রয়োজনীয় সমস্ত ডেটা রয়েছে এবং এটি ফাইলের ইনডেক্স নম্বর যা ইনোড টেবিলে সংরক্ষিত। যখনই আপনি একটি ফাইল তৈরি করেন সেই ফাইলটির জন্য একটি ইনোড নম্বর তৈরি করা হয়। স্ট্যাট সিস্টেম কল ব্যবহার করে সিস্টেম টেবিল দেখা যাবে।



সি স্ট্যাট সিস্টেম কলের সিনট্যাক্স:

সি প্রোগ্রামিং ভাষায় স্ট্যাট সিস্টেম কল ব্যবহার করতে, আপনাকে নিম্নলিখিত শিরোনাম ফাইলটি অন্তর্ভুক্ত করতে হবে:



#অন্তর্ভুক্ত

স্ট্যাট একটি ফাইলের স্ট্যাটাস পেতে ব্যবহৃত হয়। সি স্ট্যাট সিস্টেম কলের সিনট্যাক্স প্রতিটি অপারেটিং সিস্টেমের জন্য একই নাও হতে পারে। লিনাক্সে স্ট্যাট সিস্টেম কলের সিনট্যাক্স নিম্নরূপ:





intঅবস্থা(const গৃহস্থালি *পথ, কাঠামোঅবস্থা*বুফ)

Int- এ ফাংশনের রিটার্ন টাইপ, যদি ফাংশন সফলভাবে এক্সিকিউট করা হয়, কোন ত্রুটি থাকলে 0 ফেরত দেওয়া হয়, -1 ফেরত দেওয়া হবে।

এখানে const char *পাথ ফাইলের নাম উল্লেখ করে। যদি ফাইলের পথটি একটি প্রতীকী লিঙ্ক হয় তবে আপনাকে ফাইলের নামের পরিবর্তে লিঙ্কটি নির্দিষ্ট করতে হবে।



তারপরে ফাংশনে আমাদের একটি স্ট্যাট স্ট্রাকচার রয়েছে যেখানে ফাইল সম্পর্কে ডেটা বা তথ্য সংরক্ষণ করা হয় যা নামক পয়েন্টার ব্যবহার করে বুফ, যা একটি প্যারামিটার হিসাবে পাস করা হয় এবং কলটি সম্পাদনের সময় পূরণ করা হয় এবং কল করার পরে ব্যবহারকারী দ্বারা পাঠযোগ্য।

স্ট্যাট গঠন:

শিরোনাম ফাইলে সংজ্ঞায়িত স্ট্যাট স্ট্রাকচারটিতে নিম্নলিখিত ক্ষেত্র রয়েছে:

কাঠামোঅবস্থা
{
mode_t st_mode;
ino_t st_ino;
dev_t st_dev;
dev_t st_rdev;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
অফ_টিst_size;
কাঠামোtimspec st_atim;
কাঠামোtimspec st_mtim;
কাঠামোtimspec st_ctim;
blksize_t st_blksize;
blkcnt_t st_blocks;
};

বর্ণনা:

  1. st_dev: এটি সেই ডিভাইসের আইডি যেখানে আমাদের বর্তমানে ফাইল রয়েছে।
  2. st_rdev: এই ক্ষেত্রটি বর্ণনা করে যে একটি নির্দিষ্ট ফাইল একটি নির্দিষ্ট ডিভাইসের প্রতিনিধিত্ব করে।
  3. st_ino: এটি ইনোড নম্বর বা ফাইলের ক্রমিক সংখ্যা। যেহেতু এটি একটি সূচক সংখ্যা তাই এটি সমস্ত ফাইলের জন্য অনন্য হওয়া উচিত
  4. st_size: st_size হল বাইটে ফাইলের আকার।
  5. st_atime: এটি শেষ সময় বা সাম্প্রতিক সময়ে যখন ফাইলটি অ্যাক্সেস করা হয়েছিল।
  6. st_ctime: এটি সাম্প্রতিক সময়ে যখন ফাইলের স্থিতি বা অনুমতি পরিবর্তন করা হয়েছিল।
  7. st_mtime: এটি সাম্প্রতিক সময় যেখানে ফাইলটি সংশোধন করা হয়েছিল।
  8. st_blksize: এই ক্ষেত্রটি I/O ফাইল সিস্টেমের জন্য পছন্দসই ব্লক সাইজ দেয় যা ফাইল থেকে ফাইলে পরিবর্তিত হতে পারে।
  9. st_blocks: এই ক্ষেত্রটি 512 বাইটের গুণে মোট ব্লকের সংখ্যা বলে।
  10. st_nlink: এই ক্ষেত্রটি হার্ড লিঙ্কগুলির মোট সংখ্যা বলে।
  11. st_uid: এই ক্ষেত্রটি ব্যবহারকারী আইডি নির্দেশ করে।
  12. st_gid: এই ক্ষেত্রটি গ্রুপ আইডি নির্দেশ করে।
  13. st_mode: এটি ফাইলের অনুমতি নির্দেশ করে, ফাইলের মোডগুলি বলে। St_mode ক্ষেত্রের জন্য যে পতাকাগুলি সংজ্ঞায়িত করা উচিত তা নিম্নরূপ:
পতাকা বর্ণনা পতাকা মান
S_IFMT একটি বিটমাস্ক একটি ফাইলের মোড মান পেতে ব্যবহৃত হয় 0170000
S_IFSOCK সকেটের একটি ফাইল ধ্রুবক 0140000
S_IFLINK প্রতীকী লিঙ্কের একটি ফাইল ধ্রুবক 0120000
S_IFREG নিয়মিত ফাইলের জন্য ফাইল ধ্রুবক 0100000
S_IFBLK ব্লক ফাইলের জন্য ফাইল ধ্রুবক 0060000
S_IFDIR ডিরেক্টরি ফাইলের জন্য ফাইল ধ্রুবক 0040000
S_IFCHR অক্ষর ফাইলের জন্য ফাইল ধ্রুবক 0020000
S_IFIFO একটি ফাইল ফিফো ধ্রুবক 0010000
S_ISUID ইউজার আইডি বিট সেট করুন 0004000
S_ISGID গ্রুপ আইডি বিট সেট করুন 0002000
S_ISVTX স্টিকি বিট যা শেয়ার করা লেখা নির্দেশ করে 0001000
S_IRWXU মালিকের অনুমতি (পড়ুন, লিখুন, চালান) 00700
S_IRUSR মালিকের জন্য অনুমতি পড়ুন 00400
S_IWUSR মালিকের জন্য অনুমতি লিখুন 00200
S_IXUSR মালিকের জন্য অনুমতি সম্পাদন করুন 00100
S_IRWXG গ্রুপ অনুমতি (পড়ুন, লিখুন, চালান) 00070
S_IRGRP গ্রুপের জন্য অনুমতি পড়ুন 00040
S_IWGRP গ্রুপের জন্য অনুমতি লিখুন 00020
S_IXGRP গ্রুপের জন্য অনুমতি সম্পাদন করুন 00010
S_IRWXO অন্যদের জন্য অনুমতি (পড়ুন, লিখুন, চালান) 00007
S_IROTH অন্যদের জন্য অনুমতি পড়ুন 00004
S_IWOTH অন্যদের জন্য অনুমতি লিখুন 00002
S_IXOTH অন্যদের জন্য অনুমতি কার্যকর করুন 00001

স্ট্যাট সিস্টেম কল কিভাবে ব্যবহার করবেন:

নিচের উদাহরণ দেখায় কিভাবে লিনাক্স, উবুন্টুতে সি প্রোগ্রামিং ভাষায় স্ট্যাট সিস্টেম কল ব্যবহার করতে হয়।

উদাহরণ 1:

নিম্নলিখিত কোডে আমরা একটি ফাইলের মোড খুঁজে বের করতে যাচ্ছি:

কোড:

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
intপ্রধান()
{
// স্টেট স্ট্রাক্টের পয়েন্টার
কাঠামোরাষ্ট্র sfile;

// স্ট্যাট সিস্টেম কল
অবস্থা('stat.c', &sfile);

// অ্যাক্সেস st_mode (স্ট্যাট স্ট্রাক্টের ডেটা সদস্য)
printf ('st_mode = %o',sfile।st_mode);
প্রত্যাবর্তন 0;
}

প্রোগ্রামটি কম্পাইল করা এবং চালানো নীচের মতো ফিরে আসে:

এই কোডে, আমরা স্ট্যাট সিস্টেম কলে ফাইলের নাম পাস করেছি এবং তারপরে স্টেট স্ট্রাক্টের পয়েন্টার যা sfile। স্টেট স্ট্রাক্টের পয়েন্টার তারপর st_mode অ্যাক্সেস করতে ব্যবহৃত হয় যা printf স্টেটমেন্ট ব্যবহার করে ফাইলের মোড প্রদর্শন করে।

হেডার ফাইল ব্যবহার করা হয় যাতে আপনি স্ট্যাট সিস্টেম কল ব্যবহার করতে পারেন। হেডার ফাইল হল স্ট্যান্ডার্ড ইনপুট/আউটপুট লাইব্রেরি ফাইল যাতে আপনি আপনার সি কোডে printf বা scanf ব্যবহার করতে পারেন।

উদাহরণ 2:

নিম্নলিখিত কোডে আমরা স্ট্যাট সিস্টেম কল ব্যবহার করে ফাইল সম্পর্কে তথ্য পেতে যাচ্ছি:

কোড:

#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত
#অন্তর্ভুক্ত

শূন্যsfile(গৃহস্থালি constফাইলের নাম[]);

intপ্রধান(){
ssize_t পড়া;
গৃহস্থালি*বাফার= 0;
size_tbuf_size= 0;

printf ('চেক করার জন্য একটি ফাইলের নাম লিখুন:n');
পড়ুন=গেটলাইন(&বাফার, &buf_size,stdin);

যদি (পড়ুন<=0 ){
printf ('গেটলাইন ব্যর্থn');
প্রস্থান ();
}

যদি (বাফার[পড়ুন-] == 'n'){
বাফার[পড়ুন-] = 0;
}

intগুলি=খোলা(বাফার,O_RDONLY);
যদি(গুলি== -){
printf ('ফাইলের অস্তিত্ব নেইn');
প্রস্থান ();
}
অন্য{
sfile(বাফার);
}
বিনামূল্যে (বাফার);
প্রত্যাবর্তন 0;
}

শূন্যsfile(গৃহস্থালি constফাইলের নাম[]){

কাঠামোরাষ্ট্র sfile;

যদি(অবস্থা(ফাইলের নাম, &sfile)== -){
printf ('ত্রুটি ঘটেছেn');
}

// স্ট্যাট স্ট্রাক্টের ডেটা সদস্যদের অ্যাক্সেস করা
printf ('nফাইল st_uid %dn',sfile।st_uid);
printf ('nফাইল st_blksize %ldn',sfile।st_blksize);
printf ('nফাইল st_gid %dn',sfile।st_gid);
printf ('nফাইল st_blocks %ldn',sfile।st_blocks);
printf ('nফাইল st_size %ldn',sfile।st_size);
printf ('nফাইল st_nlink% un',(স্বাক্ষরবিহীন int)sfile।st_nlink);
printf ('nফাইল অনুমতি ব্যবহারকারীn');
printf ((sfile।st_mode &S_IRUSR)? 'আর':'-');
printf ((sfile।st_mode &S_IWUSR)? 'ভিতরে':'-');
printf ((sfile।st_mode &S_IXUSR)? 'এক্স':'-');
printf ('n');
printf ('nফাইল অনুমতি গ্রুপn');
printf ((sfile।st_mode &S_IRGRP)? 'আর':'-');
printf ((sfile।st_mode &S_IWGRP)? 'ভিতরে':'-');
printf ((sfile।st_mode &S_IXGRP)? 'এক্স':'-');
printf ('n');
printf ('nফাইল অনুমতি অন্যান্যn');
printf ((sfile।st_mode &S_IROTH)? 'আর':'-');
printf ((sfile।st_mode &S_IWOTH)? 'ভিতরে':'-');
printf ((sfile।st_mode &S_IXOTH)? 'এক্স':'-');
printf ('n');
}

আউটপুট:

উপরের সি কোডে, আমরা ফাইলের নাম লিখেছি এবং যদি ফাইলটির অস্তিত্ব না থাকে তাহলে প্রোগ্রামটির এক্সিকিউশন বন্ধ হয়ে যাবে। এটি নিম্নলিখিত ছবিতে প্রদর্শিত হয়:

যদি আমাদের ফাইল বিদ্যমান থাকে, ফাংশন sfile (n) বলা হবে যেখানে আমরা ফাইলের নাম পাস করেছি। ফাংশনের ভিতরে, প্রথমে আমরা স্ট্যাট সিস্টেম কল ব্যবহার করেছি, যদি স্ট্যাট () ফিরে আসে -1 তাহলে অবশ্যই কোন ত্রুটি থাকবে যাতে একটি বার্তা মুদ্রণ করা হবে এবং প্রোগ্রামটি চালানো বন্ধ হয়ে যাবে।

তারপর printf স্টেটমেন্টে আমরা ফাংশন এবং ডট বিভাজকের নাম ব্যবহার করেছি এর ডেটা সদস্যদের অ্যাক্সেস করতে স্ট্যাট স্ট্রাকচার

তারপর ফাইলের মোডের জন্য আমরা st_mode এর ম্যাক্রো বা পতাকা অ্যাক্সেস করেছি। এখানে লজিক্যাল এবং অপারেটর সংশ্লিষ্ট মোড প্রিন্ট করতে ব্যবহৃত হয়। আমরা নির্দিষ্ট ফাইলের জন্য ব্যবহারকারী, গোষ্ঠী এবং অন্যান্যদের জন্য অনুমতি চেক করেছি (ব্যবহারকারীর দ্বারা প্রবেশ করা ফাইলের নাম)।

এটি দিয়ে আপনি দেখতে পারেন কিভাবে সি প্রোগ্রামিং ভাষা থেকে স্ট্যাট সিস্টেম কল ব্যবহার করতে হয় ফাইল সম্পর্কে ওএস কার্নেল থেকে তথ্য পেতে। যদি আপনার কোন প্রশ্ন থাকে তবে নির্দ্বিধায় মন্তব্য বিভাগের মাধ্যমে আমাদের জানান।