اسٹیٹ سسٹم کال لینکس ٹیوٹوریل۔

Stat System Call Linux Tutorial



لینکس کرنل کے ذریعہ فراہم کردہ سسٹم کالز سی پروگرامنگ زبان میں glibc کے ذریعے سامنے آتی ہیں۔ جب سسٹم کال استعمال کی جاتی ہے ، آپ OS سے رابطہ کر رہے ہوتے ہیں اور واپسی پر OS آپ سے ان پیرامیٹرز کے ذریعے رابطہ کرتا ہے جو سسٹم کال فنکشنز (ریٹرن ویلیوز) پر واپس آتے ہیں۔

سٹیٹ سسٹم کال:

اسٹیٹ سسٹم کال لینکس میں ایک سسٹم کال ہے جس میں فائل کی حیثیت کو چیک کیا جاتا ہے جیسے چیک کرنا کہ فائل تک رسائی کب ہوئی۔ اسٹیٹ () سسٹم کال دراصل فائل کی خصوصیات کو لوٹاتا ہے۔ ایک انوڈ کی فائل کی خصوصیات بنیادی طور پر Stat () فنکشن کے ذریعے لوٹائی جاتی ہیں۔ ایک انوڈ میں فائل کا میٹا ڈیٹا ہوتا ہے۔ ایک انوڈ پر مشتمل ہے: فائل کی قسم ، فائل کا سائز ، جب فائل تک رسائی حاصل کی گئی (ترمیم شدہ ، حذف شدہ) جو کہ وقت کے ڈاک ٹکٹ ہیں ، اور فائل کا راستہ ، یوزر آئی ڈی اور گروپ آئی ڈی ، فائل کے لنکس ، اور فائل کے مواد کا جسمانی پتہ۔







ہم کہہ سکتے ہیں کہ انوڈ میں وہ تمام ڈیٹا موجود ہے جو stat () سسٹم کال کے لیے درکار ہے اور یہ فائل کا انڈیکس نمبر ہے جو کہ انوڈ ٹیبل میں محفوظ ہے۔ جب بھی آپ کوئی فائل بناتے ہیں اس کے لیے انوڈ نمبر بن جاتا ہے۔ اسٹیٹ سسٹم کال کا استعمال کرتے ہوئے سسٹم ٹیبلز دیکھے جا سکتے ہیں۔



سی سٹیٹ سسٹم کال کا نحو:

C پروگرامنگ زبان میں سٹیٹ سسٹم کال استعمال کرنے کے لیے ، آپ کو درج ذیل ہیڈر فائل کو شامل کرنا ہوگا۔



#شامل کریں

اسٹیٹ کا استعمال فائل کی حیثیت حاصل کرنے کے لیے کیا جاتا ہے۔ سی سٹیٹ سسٹم کال کا نحو ہر آپریٹنگ سسٹم کے لیے ایک جیسا نہیں ہو سکتا۔ لینکس میں سٹیٹ سسٹم کال کا نحو اس طرح ہے:





intحالت(const چار *راستہ، ساختحالت*بف)

انٹ میں فنکشن کی واپسی کی قسم ، اگر فنکشن کامیابی کے ساتھ چلایا جاتا ہے ، 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؛
ساختٹمسپیک st_mtim؛
ساختٹمسپیک 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: یہ فیلڈ گروپ ID کی نشاندہی کرتا ہے۔
  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مرکزی()
{
// stat struct کی طرف اشارہ۔
ساختریاستی فائل؛

// اسٹیٹ سسٹم کال۔
حالت('stat.c'، &فائل)؛

// st_mode تک رسائی (سٹیٹ ڈھانچے کا ڈیٹا ممبر)
پرنٹ ایف ('st_mode =٪ o'،فائلst_mode)؛
واپسی ؛
}

پروگرام کو مرتب کرنا اور چلانا نیچے کی طرح لوٹتا ہے:

اس کوڈ میں ، ہم نے اسٹیٹ سسٹم کال میں فائل کا نام اور پھر پوائنٹر کو اسٹیٹ ڈھانچے میں منتقل کیا ہے جو کہ sfile ہے۔ سٹینٹ ساخت کا اشارہ پھر st_mode تک رسائی کے لیے استعمال کیا جاتا ہے جو printf بیان کا استعمال کرتے ہوئے فائل کا موڈ دکھاتا ہے۔

ہیڈر فائل استعمال کی جاتی ہے تاکہ آپ سٹیٹ سسٹم کال استعمال کر سکیں۔ ہیڈر فائل معیاری ان پٹ/آؤٹ پٹ لائبریری فائل ہے تاکہ آپ اپنے C کوڈ میں printf یا scanf استعمال کر سکیں۔

مثال 2:

مندرجہ ذیل کوڈ میں ہم سٹیٹ سسٹم کال کا استعمال کرتے ہوئے فائل کے بارے میں معلومات حاصل کرنے جا رہے ہیں۔

کوڈ:

#شامل کریں
#شامل کریں
#شامل کریں
#شامل کریں

باطلفائل(چار constفائل کا نام[])؛

intمرکزی(){
ssize_t پڑھا؛
چار*بفر= ؛
size_tbuf_size= ؛

پرنٹ ایف (چیک کرنے کے لیے فائل کا نام درج کریں:n')؛
پڑھیں=گیٹ لائن(&بفر، &buf_size،stdin)؛

اگر (پڑھیں<= ){
پرنٹ ایف (گیٹ لائن ناکامn')؛
باہر نکلیں ()؛
}

اگر (بفر[پڑھیں-] == 'n'){
بفر[پڑھیں-] = ؛
}

ints=کھلا(بفر،O_RDONLY)؛
اگر(s== -){
پرنٹ ایف ('فائل موجود نہیں ہےn')؛
باہر نکلیں ()؛
}
اور{
فائل(بفر)؛
}
مفت (بفر)؛
واپسی ؛
}

باطلفائل(چار constفائل کا نام[]){

ساختریاستی فائل؛

اگر(حالت(فائل کا نام، اورفائل)== -){
پرنٹ ایف ('خرابی پیش آگئیn')؛
}

// اسٹیٹ ڈھانچے کے ڈیٹا ممبروں تک رسائی۔
پرنٹ ایف ('nفائل st_uid٪ d۔n'،فائلst_uid)؛
پرنٹ ایف ('nفائل st_blksize٪ ldn'،فائلst_blksize)؛
پرنٹ ایف ('nفائل st_gid٪ d۔n'،فائلst_gid)؛
پرنٹ ایف ('nفائل st_blocks٪ ldn'،فائلst_blocks)؛
پرنٹ ایف ('nفائل st_size٪ ldn'،فائلst_size)؛
پرنٹ ایف ('nفائل st_nlink٪ un'،(دستخط شدہ int)فائلst_nlink)؛
پرنٹ ایف ('nفائل کی اجازت صارفn')؛
پرنٹ ایف ((فائلst_mode &S_IRUSR)؟ 'ر':'-')؛
پرنٹ ایف ((فائلst_mode &S_IWUSR۔)؟ 'میں':'-')؛
پرنٹ ایف ((فائلst_mode &S_IXUSR۔)؟ 'ایکس':'-')؛
پرنٹ ایف ('n')؛
پرنٹ ایف ('nفائل اجازت گروپn')؛
پرنٹ ایف ((فائلst_mode &S_IRGRP)؟ 'ر':'-')؛
پرنٹ ایف ((فائلst_mode &S_IWGRP)؟ 'میں':'-')؛
پرنٹ ایف ((فائلst_mode &S_IXGRP)؟ 'ایکس':'-')؛
پرنٹ ایف ('n')؛
پرنٹ ایف ('nفائل کی اجازت دیگر۔n')؛
پرنٹ ایف ((فائلst_mode &S_IROTH۔)؟ 'ر':'-')؛
پرنٹ ایف ((فائلst_mode &S_IWOTH)؟ 'میں':'-')؛
پرنٹ ایف ((فائلst_mode &S_IXOTH۔)؟ 'ایکس':'-')؛
پرنٹ ایف ('n')؛
}

آؤٹ پٹ:

مذکورہ سی کوڈ میں ، ہم نے فائل کا نام درج کیا ہے اور اگر فائل موجود نہیں ہے تو پروگرام پر عملدرآمد روک دیا جائے گا۔ یہ مندرجہ ذیل تصویر میں دکھایا گیا ہے:

اگر ہماری فائل موجود ہے تو ، فنکشن sfile (n) کہا جائے گا جس میں ہم نے فائل کا نام پاس کیا ہے۔ فنکشن کے اندر ، سب سے پہلے ہم نے سٹیٹ سسٹم کال کا استعمال کیا ہے ، اگر سٹیٹ () ریٹرن -1 آتا ہے تو اس میں کوئی غلطی ہونی چاہیے تاکہ ایک پیغام چھاپا جائے اور پروگرام پر عملدرآمد روک دیا جائے۔

پھر پرنٹف اسٹیٹمنٹ میں ہم نے ڈیٹا ممبرز تک رسائی کے لیے فنکشن اور ڈاٹ سیپریٹر کا نام استعمال کیا ہے۔ سٹیٹ ڈھانچہ .

پھر فائل کے موڈ کے لیے ہم نے st_mode کے میکرو یا جھنڈوں تک رسائی حاصل کی ہے۔ یہاں منطقی اور آپریٹر متعلقہ طریقوں کو پرنٹ کرنے کے لیے استعمال کیا جاتا ہے۔ ہم نے مخصوص فائل (صارف کا داخل کردہ فائل کا نام) کے لیے صارف ، گروپ اور دیگر کے لیے اجازت کی جانچ کی ہے۔

اس کے ساتھ آپ دیکھ سکتے ہیں کہ فائلوں کے بارے میں OS کرنل سے معلومات حاصل کرنے کے لیے C پروگرامنگ لینگویج سے سٹیٹ سسٹم کال کا استعمال کیسے کریں۔ اگر آپ کو کوئی سوال ہے تو بلا جھجھک ہمیں تبصرہ سیکشن کے ذریعے بتائیں۔