சி நிரலாக்கத்தில் POSIX வாசிப்பு செயல்பாடு

Posix Read Function C Programing



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

செயல்பாடு வரையறை

உங்கள் குறியீட்டில் படிக்கும் செயல்பாட்டை வரையறுப்பதற்கு முன், நீங்கள் சில தேவையான தொகுப்புகளை சேர்க்க வேண்டும்.







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

POSIX படிக்கும் செயல்பாட்டை நீங்கள் எவ்வாறு வரையறுக்கிறீர்கள் என்பது இங்கே:



>>ssize_t pread(intதந்தம்,வெற்றிடம் *எருமை,size_tnbyte, off_t ஆஃப்செட்);
>>ssize_t படிக்கவும்(intஎஃப்.டி.,வெற்றிடம் *எருமை,size_tnbytes);

வாசிப்பு முறை அழைப்பிலிருந்து மூன்று அளவுரு வாதங்களை எடுக்கலாம்:



int fd: தகவலைப் படிக்க வேண்டிய கோப்பின் கோப்பு விளக்கம். திறந்த கணினி அழைப்பின் மூலம் பெறப்பட்ட கோப்பு விளக்கத்தை நாம் பயன்படுத்தலாம் அல்லது வழக்கமான உள்ளீடு, வழக்கமான வெளியீடு அல்லது வழக்கமான பிழையைக் குறிப்பிட்டு முறையே 0, 1 அல்லது 2 ஐப் பயன்படுத்தலாம்.





வெற்றிடம் *buf: வாசிப்பு தரவு சேமிக்கப்பட்டு வைக்கப்பட வேண்டிய தாங்கல் அல்லது எழுத்து வரிசை.

அளவு_டி nbyte: துண்டிக்கப்படுவதற்கு முன் ஆவணத்திலிருந்து படிக்க வேண்டிய பைட்டுகளின் எண்ணிக்கை. படிக்க வேண்டிய தகவல்கள் nbytes ஐ விட குறைவாக இருந்தால் அனைத்து தகவல்களையும் இடையகத்தில் சேமிக்க முடியும்.



விளக்கம்

வாசிப்பு () முறை திறந்த ஆவண விவரக்குறிப்பான 'ஃபில்டெஸ்' அல்லது 'எஃப்டி' உடன் இணைக்கப்பட்ட கோப்பிலிருந்து 'பஃப்' மூலம் குறிப்பிடப்படும் இடையக கேஷில் 'என்பைட்' பைட்டுகளைப் படிக்க முயற்சிக்கிறது. ஒரே ஸ்ட்ரீம், FIFO அல்லது டெர்மினல் யூனிட்டில் ஒரே நேரத்தில் பல வாசிப்புகளின் தன்மையை இது வரையறுக்கவில்லை.

வாசிப்பை இயக்கும் ஆவணங்களில், வாசிப்பு செயல்முறை ஆவணத்தின் ஆஃப்செட்டில் தொடங்குகிறது, மேலும் படித்த பைட்டுகளின் எண்ணிக்கையால் ஆஃப்செட் அதிகரிக்கப்படுகிறது. ஆவண ஆஃப்செட் கோப்பின் விளிம்பில் அல்லது அதற்கு அப்பால் இருந்தால், படித்த பைட்டுகள் இல்லை, மேலும் படிக்க () எதுவும் கிடைக்காது.

எண்ணிக்கை 0 ஆக இருக்கும்போது, ​​படிக்கவும் () கீழே குறிப்பிடப்பட்டுள்ள பிழைகளை அங்கீகரிக்கும். தவறுகள் இல்லாதிருந்தால், அல்லது பிழைகளுடன் படிக்கப்படாவிட்டால் () கணக்கிடப்படாவிட்டால், வாசிப்பு () 0 எண்ணுடன் பூஜ்ஜியத்தை அளிக்கிறது, எனவே வேறு எந்த விளைவுகளும் இல்லை.

SOSIZE_MAX ஐ விட எண்ணிக்கை அதிகமாக இருந்தால், POSIX.1 இன் படி, முடிவு செயல்படுத்துவதன் மூலம் தீர்மானிக்கப்படுகிறது.

திரும்ப மதிப்பு

பைட்டுகளின் எண்கள் ‘படித்த’ மற்றும் ‘ப்ரீஆட்’ சாதனை மீது திரும்பும்போது எதிர்மறை அல்லாத முழு எண்ணாக இருக்க வேண்டும், அதே சமயம் கோப்பின் முடிவில் பூஜ்ஜியம் இருக்கும். ஆவணத்தின் நிலை இந்த எண்ணால் முன்னேற்றப்படுகிறது, அல்லது, ஒரு பிழையைக் குறிக்க, முறைகள் -1 க்குத் திரும்பி, 'errno' ஐ ஒதுக்கும். இந்த எண்ணிக்கை கோரப்பட்ட பைட்டுகளின் எண்ணிக்கையை விட குறைவாக இருக்கும்போது, ​​இது ஒரு பிட் பைட் அல்ல. இப்போதைக்கு குறைவான பைட்டுகள் கிடைக்க வாய்ப்புள்ளது.

பிழைகள்

இந்த பிழைகள் ஏற்பட்டால் ப்ரீட் மற்றும் ரீட் செயல்பாடு தோல்வியடையும்:

ஈகைன்:

ஆவணம் அல்லது கோப்பு விவரக்குறிப்பு 'fd' என்பது சாக்கெட் அல்லாத கோப்பைச் சேர்ந்தது, இது தடையற்றது (O NONBLOCK) என்று பெயரிடப்பட்டுள்ளது மற்றும் வாசிப்பைத் தடுக்கும்.

EWOUDDLOCK:

விளக்கமளிக்கும் ‘fd’ ஒரு சாக்கெட்டைச் சேர்ந்தது, இது தடையற்றது (O_NONBLOCK) என்று பெயரிடப்பட்டுள்ளது மற்றும் வாசிப்பைத் தடுக்கும்.

EBADF:

'எஃப்.டி' பயன்படுத்தக்கூடிய விளக்கமாக இருக்காது, அல்லது வாசிப்புக்கு திறந்திருக்காது.

விளைவு:

உங்கள் 'பஃப்' உங்கள் அணுகக்கூடிய முகவரி இடத்திற்கு வெளியே இருக்கும்போது இது நிகழ்கிறது.

EINTR:

தகவல் தரவைப் படிப்பதற்கு முன், அழைப்பு ஒரு சமிக்ஞையால் துண்டிக்கப்பட்டிருக்கலாம்.

தேர்வு:

உங்கள் பி.டி. ', அல்லது ஆவண ஆஃப்செட் சரியான முறையில் தொடர்புபடுத்தப்படவில்லை.

தேர்வு:

டைமர்ஃப்டி கிரியேட் (2) க்கான அழைப்பைப் பயன்படுத்தி 'fd' என்ற விளக்கத்தை உருவாக்கியிருக்கலாம், மேலும் தவறான அளவு இடையகத்தை வாசிக்கக் கொடுக்கப்பட்டுள்ளது.

EIO:

இது உள்ளீடு/வெளியீடு பிழை. பின்னணி செயல்முறை குழு அதன் ஒழுங்குமுறை முனையத்திலிருந்து படிக்க முயற்சிக்கும்போது இது நிகழ்கிறது, மேலும் ஒன்று அல்லது மற்றொன்று SIGTTIN ஐ கவனிக்காமல் அல்லது தடுக்கிறது, அல்லது அதன் செயல்முறை குழு இழக்கப்படுகிறது. இந்த பிழைக்கான மற்றொரு காரணம் குறைந்த-நிலை உள்ளீடு/வெளியீடு பிழையாக இருக்கலாம், இதற்கிடையில் ஒரு வன் அல்லது டேப்பில் இருந்து படிக்கவும். நெட்வொர்க் செய்யப்பட்ட தரவு கோப்புகளில் EIO இன் மற்றொரு சாத்தியமான காரணம், கோப்பு விளக்கத்தில் ஆலோசனை பூட்டுதலை அகற்றுதல் மற்றும் அந்த பூட்டின் தோல்வி.

EISDIR:

கோப்பு விவரிப்பான் 'fd' ஒரு கோப்பகத்திற்கு சொந்தமானது.

குறிப்புகள்:

மேலும் பல பிழைகள் ஏற்படலாம், விளக்கப்படம் 'fd' உடன் இணைக்கப்பட்ட பொருளின் மீது தற்செயல். Size_t மற்றும் ssize_t படிவங்கள் இரண்டும் குறிக்கப்படாதவை மற்றும் POSIX.1 ஆல் வரையறுக்கப்பட்ட எண் தரவு வகைகள். லினக்ஸில், அதிகபட்சம் 0x7ffff000 (2,147,479,552) பைட்டுகளை வாசிப்பு செயல்பாடு (மற்றும் அதற்கு சமமான கணினி அழைப்புகள்) மூலம் அனுப்பலாம், முதலில் அனுப்பப்பட்ட பைட்டுகளின் எண்ணிக்கையை திருப்பித் தரலாம் (32-பிட் மற்றும் 64-பிட் தளங்களில்). NFS கோப்பு முறைமைகளுடன், சிறிய ஸ்ட்ரீம்களைப் படிப்பதன் மூலம் நேர முத்திரை மாற்றப்பட்ட முதல் கணம், அடுத்தடுத்த அழைப்புகள் அவ்வாறு செய்யாது. இது கிளையன்ட்-பக்க பண்புகளை கேச் செய்வதன் மூலம் தூண்டப்படுகிறது, இருப்பினும், NFS கிளையன்ட்கள் st_atime (கடைசி கோப்பு அணுகல் நேரம்) வழியாக சேவையகத்திற்கு புதுப்பிப்பதை நிறுத்திவிட்டனர் மற்றும் வாடிக்கையாளரின் இடையகத்திலிருந்து நிறைவேற்றப்பட்ட வாடிக்கையாளர் பக்க வாசிப்புகள் st- க்கு மாற்றங்களைத் தூண்டாது. சேவையகத்தில் ஓரளவு அளவீடுகள் கிடைக்காததால் சேவையகத்தில். வாடிக்கையாளர் பக்க பண்புக்கூறு தற்காலிக சேமிப்பை நீக்குவதன் மூலம், யுனிக்ஸ் மெட்டாடேட்டாவை அணுகலாம், ஆனால் இது சேவையகத்தில் சுமையை கணிசமாக அதிகரிக்கும் மற்றும் பெரும்பாலான சந்தர்ப்பங்களில் உற்பத்தித்திறனை பாதிக்கும்.

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

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

மேலே உள்ள குறியீட்டின் வெளியீடு கீழே உள்ள படத்தில் காட்டப்பட்டுள்ளபடி இருக்கும்.

உதாரணம் 02:

வாசிப்பு செயல்பாட்டின் செயல்பாட்டை விளக்கும் மற்றொரு எடுத்துக்காட்டு கீழே கொடுக்கப்பட்டுள்ளது.

மற்றொரு கோப்பை உருவாக்கி, கீழே உள்ள குறியீட்டை அதில் உள்ளபடி எழுதுங்கள். இங்கே fd1 & fd2 என்ற இரண்டு விளக்கங்கள் உள்ளன, அவை இரண்டும் தங்கள் சொந்த திறந்த அட்டவணை கோப்பு அணுகலைக் கொண்டுள்ளன. எனவே foobar.txt க்கு, ஒவ்வொரு விவரிப்பாளருக்கும் அதன் கோப்பு இடம் உள்ளது. Foobar.txt இன் முதல் பைட் fd2 இலிருந்து மொழிபெயர்க்கப்பட்டுள்ளது, இதன் விளைவாக c = f, c = o அல்ல.

முடிவுரை

சி நிரலாக்கத்தில் POSIX வாசிப்பு செயல்பாட்டை நாங்கள் திறமையாக படித்திருக்கிறோம். வட்டம், எந்த சந்தேகமும் இல்லை.