Ц Програмирање

ПОСИКС функција читања у Ц програмирању

ПОСИКС функција читања у Ц програмирању
У традиционалним оперативним системима компатибилним са ПОСИКС-ом, за добијање информација из документа који се налази у систему датотека, програм је користио читани системски позив. Датотека дефинише дескриптор документа којем се обично приступа из претходног позива за отварање. Овај системски позив за читање очитава информације у бајтовима и цео број који позивалац наводи из документа, а затим их чува у баферу који пружа механизам позивања.

Дефиниција функције

Пре него што дефинишете функцију читања у свом коду, морате да укључите неке потребне пакете.

#инцлуде

Ево како дефинишете ПОСИКС функцију читања:

>> ссизе_т преад (инт филдес, воид * буф, сизе_т нбите, офф_т оффсет);
>> ссизе_т реад (инт фд, воид * буф, сизе_т нбитес);

Из позива методе читања могу се преузети три параметра параметра:

инт фд: Дескриптор датотеке одакле ће се информације читати. Могли бисмо да користимо дескриптор датотеке стечен отвореним системским позивом или бисмо могли да користимо 0, 1 или 2 који се односи на типични улаз, редовни излаз или редовну грешку, респективно.

Воид * буф: Међуспремник или низ знакова у којем прочитани подаци треба да се чувају и чувају.

Сизе_т нбите: Број бајтова које је требало прочитати из документа пре скраћивања. Све информације могу се сачувати у међуспремнику ако су информације које се читају краће од нбајта.

Опис

Метода реад () покушава да прочита бајтове „нбите“ у предмеморију међуспремника на коју се односи „буф“ било из датотеке повезане са отвореним описом документа „Филдес“ или „фд“. Не дефинише природу неколико истовремених читања на истом току, ФИФО или терминалној јединици.

На документима који омогућавају читање, поступак читања започиње одмаком документа, а одмак се повећава за број прочитаних бајтова. Ако је помак документа на или изнад ивице датотеке, нема прочитаних бајтова, а реад () их не даје.

Када је број 0, реад () ће препознати грешке наведене у наставку. Ако нема грешака или ако читање () није урачунато у грешке, читање () даје нулу са бројањем 0 и стога нема других последица.

Ако је број већи од ССИЗЕ_МАКС, према ПОСИКС-у.1, онда се исход одређује спровођењем.

Повратна вредност

Број бајтова 'реад' и 'преад' враћен након постизања мора бити ненегативан цијели број док нула показује на крај датотеке. Положај документа се напредује помоћу овог броја, или у супротном, што значи грешку, методе враћају -1 и додељују 'еррно'. Када је ова бројка мања од броја бајтова, то није грешка у бајту. За сада је могуће да је доступно мање бајтова.

Грешке

Функција пред-читања и читања неће бити успешна ако се појаве ове грешке:

ЕАГАИН:

Дескриптор документа или датотеке 'фд' припада датотеци која није соцкет која је означена као неблокирајућа (О НОНБЛОЦК) и блокираће читање.

ЕВОУЛДБЛОЦК:

Дескриптор 'фд' припада утичници која је означена као неблокирајућа (О_НОНБЛОЦК) и блокираће читање.

ЕБАДФ:

„Фд“ можда није употребљив дескриптор или можда није отворен за читање.

ЕФАУЛТ:

То се дешава када је ваш „буф“ изван вашег доступног адресног простора.

ЕИНТР:

Пре читања информативних података, позив је можда прекинуо сигнал.

ЕИНВАЛ:

Ова грешка се јавља када је ваш 'фд' дескриптор умешан у објекат који није прикладан за читање или је документ одвезан заставицом О_ДИРЕЦТ и ако је једна или друга адреса наведена у 'буф', вредност наведена у 'цоунт ', или одмак документа није на одговарајући начин повезан.

ЕИНВАЛ:

Дескриптор 'фд' је можда формиран помоћу позива тимерфд_цреате (2), а дат је нетачан бафер величине за читање.

ЕИО:

То је грешка улаза / излаза. Појављује се када позадинска процесна група покушава да чита са свог регулаторног терминала, а један или други превиди или блокира СИГТТИН или је његова процесна група ожалошћена. Још један разлог ове грешке може бити грешка улаза / излаза на ниском нивоу у међувремену читање са тврдог диска или траке. Још један потенцијални узрок ЕИО за умрежене датотеке података је уклањање саветодавног закључавања на опису датотеке и неуспех те браве.

ЕИСДИР:

Дескриптор датотеке 'фд' припада директоријуму.

Напомене:

Могу се појавити и многе друге грешке, зависно од објекта повезаног са дескриптором „фд“. И обрасци сизе_т и ссизе_т су неозначени и означени нумеричким типовима података дефинисаних ПОСИКС-ом.1. На Линуку, функција читања (и еквивалентни системски позиви) може пренети највише 0к7фффф000 (2.147.479.552) бајтова, враћајући број првобитно пренетих бајтова (и на 32-битној и на 64-битној платформи). Са НФС системима датотека, само у првом тренутку када се временска ознака мења читањем ситних токова информација, наредни позиви то не би учинили. Покреће се кеширањем атрибута на страни клијента, иако, иако не сви, НФС клијенти престају да се ажурирају на сервер путем ст_атиме (време последњег приступа датотеци), а очитавања на страни клијента испуњена из бафера клијента не би покренула промене у ст- атиме на серверу јер нису доступна очитавања са стране сервера. Уклањањем кеширања атрибута на страни клијента може се приступити УНИКС метаподацима, али то би у већини случајева значајно повећало оптерећење сервера и утицало на продуктивност.

Пример 01:

Ево програма Ц за демонстрацију позива функције читања на Линук систему. Напишите наредбу испод у нову датотеку. Додајте библиотеке и у главној функцији иницијализујте дескриптор и величину. Дескриптор отвара датотеку и величина се користи за читање података о датотеци.

Излаз за горњи код би био као што је приказано на доњој слици.

Пример 02:

Следећи пример за илустрацију рада функције читања дат је у наставку.

Направите другу датотеку и запишите код испод како је у њој. Ево два дескриптора, фд1 и фд2, који оба имају свој приступ датотеци отворене табеле. Тако и за фообар.ткт, сваки дескриптор има своју локацију датотеке. Први бајт фообар-а.ткт је преведен са фд2, а резултат је ц = ф, а не ц = о.

Закључак

Ефикасно смо прочитали функцију ПОСИКС читања у програмирању на језику Ц. Надам се да више нема сумњи.

Додајте покрете миша у Виндовс 10 помоћу ових бесплатних алата
Последњих година рачунари и оперативни системи су се увелико развили. Било је време када су корисници морали да користе команде за навигацију кроз мен...
Контролишите и управљајте кретањем миша између више монитора у оперативном систему Виндовс 10
Двоструки приказ миша омогућава вам контролу и конфигурисање кретања миша између више монитора, успоравајући његово кретање близу границе. Виндовс 10/...
ВинМоусе вам омогућава да прилагодите и побољшате кретање показивача миша на Виндовс рачунару
Ако желите да побољшате подразумеване функције показивача миша, користите бесплатни програм ВинМоусе. Додаје још функција које ће вам помоћи да на нај...