ஸ்டேட் சிஸ்டம் கால் லினக்ஸ் டுடோரியல்

Stat System Call Linux Tutorial



லினக்ஸ் கர்னல் வழங்கும் கணினி அழைப்புகள் சி நிரலாக்க மொழியில் glibc வழியாக வெளிப்படும். ஒரு கணினி அழைப்பு பயன்படுத்தப்படும்போது, ​​நீங்கள் OS உடன் தொடர்புகொள்கிறீர்கள் மற்றும் திரும்பும்போது OS அழைப்பு செயல்பாடுகளுக்கு (திரும்ப மதிப்புகள்) திரும்பும் அளவுருக்கள் மூலம் OS உங்களுக்கு தொடர்பு கொள்கிறது.

ஸ்டேட் சிஸ்டம் கால்:

ஸ்டாட் சிஸ்டம் கால் என்பது லினக்ஸில் உள்ள ஒரு சிஸ்டம் அழைப்பு, கோப்பு எப்போது அணுகப்பட்டது என்பதை சரிபார்ப்பது போன்ற ஒரு கோப்பின் நிலையை சரிபார்க்க. புள்ளி () கணினி அழைப்பு உண்மையில் கோப்பு பண்புகளை வழங்குகிறது. ஒரு ஐனோடின் கோப்பு பண்புக்கூறுகள் அடிப்படையில் ஸ்டேட் () செயல்பாட்டால் திரும்பப் பெறப்படுகின்றன. ஒரு இனோடில் கோப்பின் மெட்டாடேட்டா உள்ளது. ஒரு ஐனோட் கொண்டுள்ளது: கோப்பின் வகை, கோப்பின் அளவு, கோப்பை அணுகியபோது (மாற்றியமைக்கப்பட்ட, நீக்கப்பட்ட) நேர முத்திரைகள், மற்றும் கோப்பின் பாதை, பயனர் ஐடி மற்றும் குழு ஐடி, கோப்பின் இணைப்புகள் மற்றும் கோப்பு உள்ளடக்கத்தின் உடல் முகவரி.







ஸ்டாட் () சிஸ்டம் அழைப்பிற்குத் தேவையான அனைத்து தரவையும் ஐனோட் கொண்டுள்ளது என்று நாம் கூறலாம் மேலும் இது ஐனோட் அட்டவணையில் சேமிக்கப்படும் கோப்புக்கான குறியீட்டு எண். நீங்கள் ஒரு கோப்பை உருவாக்கும் போதெல்லாம் அந்த கோப்பிற்கான ஒரு ஐனோட் எண் உருவாக்கப்படும். ஸ்டேட் சிஸ்டம் அழைப்பைப் பயன்படுத்தி கணினி அட்டவணைகளைப் பார்க்க முடியும்.



சி ஸ்டேட் சிஸ்டம் அழைப்பின் தொடரியல்:

சி நிரலாக்க மொழியில் ஸ்டேட் சிஸ்டம் அழைப்பைப் பயன்படுத்த, நீங்கள் பின்வரும் தலைப்பு கோப்பை சேர்க்க வேண்டும்:



#சேர்க்கிறது

ஒரு கோப்பின் நிலையை பெற Stat பயன்படுத்தப்படுகிறது. சி ஸ்டேட் சிஸ்டம் அழைப்பின் தொடரியல் ஒவ்வொரு இயக்க முறைமைக்கும் ஒரே மாதிரியாக இருக்காது. லினக்ஸில் ஸ்டேட் சிஸ்டம் அழைப்புக்கான தொடரியல் பின்வருமாறு:





intநிலை(கான்ஸ்ட் கரி *பாதை, கட்டமைப்புநிலை*எருமை)

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;
off_tst_ அளவு;
கட்டமைப்பு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_ அளவு: 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;
}

நிரலைத் தொகுத்து இயக்குவது பின்வருமாறு:

இந்த குறியீட்டில், கோப்பின் பெயரை ஸ்டேட் சிஸ்டம் அழைப்பில் அனுப்பியுள்ளோம். ஸ்டேட் ஸ்ட்ரக்ட் சுட்டிக்காட்டி பின்னர் st_mode ஐப் பயன்படுத்த பயன்படுகிறது, இது printf அறிக்கையைப் பயன்படுத்தி கோப்பின் பயன்முறையைக் காட்டுகிறது.

தலைப்பு கோப்பு பயன்படுத்தப்படுகிறது, எனவே நீங்கள் ஸ்டேட் சிஸ்டம் அழைப்பைப் பயன்படுத்தலாம். தலைப்பு கோப்பு நிலையான உள்ளீடு/வெளியீட்டு நூலகக் கோப்பாகும், இதனால் நீங்கள் உங்கள் C குறியீட்டில் printf அல்லது scanf ஐப் பயன்படுத்தலாம்.

எடுத்துக்காட்டு 2:

பின்வரும் குறியீட்டில் ஸ்டேட் சிஸ்டம் அழைப்பைப் பயன்படுத்தி கோப்பு பற்றிய தகவல்களைப் பெறப் போகிறோம்:

குறியீடு:

#சேர்க்கிறது
#சேர்க்கிறது
#சேர்க்கிறது
#சேர்க்கிறது

வெற்றிடம்sfile(கரி கான்ஸ்ட்கோப்பு பெயர்[]);

intமுக்கிய(){
ssize_t படிக்கவும்;
கரி*இடையகம்= 0;
size_tbuf_size= 0;

printf (சரிபார்க்க ஒரு கோப்பின் பெயரை உள்ளிடவும்: n');
படி=கெட்லைன்(&இடையகம், &buf_size,ஸ்ட்டின்);

என்றால் (படி<=0 ){
printf (கெட்லைன் தோல்வியடைந்தது n');
வெளியேறு (1);
}

என்றால் (இடையகம்[படி-1] == ' n'){
இடையகம்[படி-1] = 0;
}

intகள்=திறந்த(இடையகம்,O_RDONLY);
என்றால்(கள்== -1){
printf ('கோப்பு இல்லை n');
வெளியேறு (1);
}
வேறு{
sfile(இடையகம்);
}
இலவசம் (இடையகம்);
திரும்ப 0;
}

வெற்றிடம்sfile(கரி கான்ஸ்ட்கோப்பு பெயர்[]){

கட்டமைப்புமாநில sfile;

என்றால்(நிலை(கோப்பு பெயர், &sfile)== -1){
printf ('பிழை ஏற்பட்டுவிட்டது n');
}

// ஸ்டேட் கட்டமைப்பின் தரவு உறுப்பினர்களை அணுகுதல்
printf (' nகோப்பு st_uid %d n',sfile.st_uid);
printf (' nகோப்பு st_blksize %ld n',sfile.st_blksize);
printf (' nகோப்பு st_gid %d n',sfile.st_gid);
printf (' nகோப்பு st_blocks %ld n',sfile.st_blocks);
printf (' nகோப்பு st_size %ld n',sfile.st_ அளவு);
printf (' nகோப்பு st_nlink% u n',(கையொப்பமிடாத 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 இன் மேக்ரோக்கள் அல்லது கொடிகளை அணுகினோம். அந்தந்த முறைகளை அச்சிட இங்கே தருக்க மற்றும் ஆபரேட்டர் பயன்படுத்தப்படுகிறது. குறிப்பிட்ட கோப்புக்கான பயனர், குழு மற்றும் மற்றவர்களுக்கான அனுமதிகளை நாங்கள் சோதித்துள்ளோம் (பயனரால் உள்ளிடப்பட்ட கோப்பு பெயர்).

கோப்புகளைப் பற்றிய OS கர்னலில் இருந்து தகவலைப் பெற சி நிரலாக்க மொழியிலிருந்து ஸ்டேட் சிஸ்டம் அழைப்பை எவ்வாறு பயன்படுத்துவது என்பதை இதன் மூலம் பார்க்கலாம். உங்களுக்கு ஏதேனும் கேள்விகள் இருந்தால் தயவுசெய்து கருத்துப் பிரிவு வழியாக எங்களுக்குத் தெரிவிக்கவும்.