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

Како се користи инотифи АПИ на језику Ц

Како се користи инотифи АПИ на језику Ц
Инотифи је Линук АПИ који се користи за надгледање догађаја система датотека.

Овај чланак ће вам показати како се Инотифи користи за праћење стварања, брисања или модификовања датотека и директоријума система датотека Линук.

Да бисте надгледали одређену датотеку или директоријум помоћу Инотифи, следите ове кораке:

  1. Креирајте инстанцу за инотификовање помоћу инотифи_инит ()
  2. Додајте пуну путању директоријума или датотеке за надгледање и догађаје за гледање помоћу функције инотифи_адд_ватцх (). У истој функцији одређујемо који догађаји (ОН ЦРЕАТЕ, ОН АЦЦЕСС, ОН МОДИФИ итд.), промене на датотекама или промене у директоријуму морају се надгледати.
  3. Сачекајте да се догоде догађаји и прочитајте ме успремник који садржи један или више догађаја који су се догодили помоћу читати() или изаберите ()
  4. Обрадите догађај који се догодио, а затим се вратите на корак 3 да бисте сачекали још догађаја и поновите.
  5. Уклоните дескриптор сата помоћу инотифи_рм_ватцх ()
  6. Затворите инстанцу инотифи.

Сада ћемо видети функције које се користе за Инотифи АПИ.

Датотека заглавља: сис / инотифи.х

инотифи_инит () функција:

Синтакса: инт инотифи_инит (воид)

Аргументи: Нема аргумената.

Повратне вриједности: Након успјеха функција враћа нови дескриптор датотеке, у случају неуспјеха функција враћа -1.

инотифи_адд_ватцх () функција:

Синтакса: инт инотифи_адд_ватцх (инт фд, цонст цхар * име пута, маска уинт32_т)

Аргументи:

Ова функција узима три аргумента.

Тхе 1ст аргумент (фд) је дескриптор датотеке који се односи на инстанцу инотифи (повратна вредност инотифи_инит () функција) .

Тхе 2нд аргумент је стаза директоријума или датотеке која се надгледа.

3рд аргумент је битна маска. Битмаска представља догађаје који се гледају. Можемо да гледамо један или више догађаја помоћу бит-ОР.

Повратне вредности: Након успјеха функција враћа дескриптор сата, а у случају неуспјеха функција враћа -1.

инотифи_рм_ватцх () функција:

Синтакса: инт инотифи_рм_ватцх (инт фд, инт32_т вд)

Аргументи:

Ова функција узима два аргумента.

Тхе 1ст аргумент (фд) је дескриптор датотеке који се односи на инстанцу инотифи (повратна вредност инотифи_инит () функција) .

Тхе 2нд аргумент (вд) је дескриптор сата (повратна вредност инотифи_адд_ватцх ()  функција) .

Повратне вредности:  У успјеху функција враћа 0, а у случају неуспјеха функција враћа -1.

Користимо читати() функција (декларисана у унистд.х заглавље датотека) за читање међуспремника, у којем се чувају информације о догађајима који су се догодили у облику инотифи_евент структура. Тхе инотифи_евент структура је декларисана у сис / инотифи.х датотека заглавља:

струцт инотифи_евент
инт32т вд;
уинт32_т маск;
уинт32_т цоокие;
уинт32_т лен;
назив карактера[];

Тхе инотифи_евент структура представља догађај система датотека враћен од инотифи система и садржи следеће чланове:

Испод је радни пример, користећи Инотифи АПИ:

Инотифи.ц датотека:

#инцлуде
#инцлуде
#инцлуде
#инцлуде
#инцлуде
#инцлуде // библиотека за функцију фцнтл
 
#дефине МАКС_ЕВЕНТС 1024 / * Максималан број догађаја за обраду * /
#дефине ЛЕН_НАМЕ 16 / * Под претпоставком да је дужина имена датотеке
неће премашити 16 бајтова * /
#дефине ЕВЕНТ_СИЗЕ (сизеоф (струцт инотифи_евент)) / * величина једног догађаја * /
#дефине БУФ_ЛЕН (МАКС_ЕВЕНТС * (ЕВЕНТ_СИЗЕ + ЛЕН_НАМЕ))
/ * бафер за чување података о догађајима * /
 
инт фд, вд;
 
воид сиг_хандлер (инт сиг)
 
/ * Корак 5. Уклоните дескриптор сата и затворите инстанцу инотифи * /
инотифи_рм_ватцх (фд, вд);
затвори (фд);
излаз (0);
 

 
 
инт маин (инт аргц, цхар ** аргв)
 
 
цхар * патх_то_бе_ватцхед;
сигнал (СИГИНТ, сиг_хандлер);
 
патх_то_бе_ватцхед = аргв [1];
 
/* Корак 1. Иницијализовати инотификовање * /
фд = инотифи_инит ();
 
 
иф (фцнтл (фд, Ф_СЕТФЛ, О_НОНБЛОЦК) < 0)  // error checking for fcntl
излаз (2);
 
/* Корак 2. Додај сат * /
вд = инотифи_адд_ватцх (фд, патх_то_бе_ватцхед, ИН_МОДИФИ | ИН_ЦРЕАТЕ | ИН_ДЕЛЕТЕ);
 
ако (вд == - 1)
принтф ("Не могу гледати:% с \ н", пут_до_бе_гледаних);

елсе
принтф ("Гледање:% с \ н", пут_до_бе_гледаних);

 
 
док (1)
 
инт и = 0, дужина;
цхар буффер [БУФ_ЛЕН];
 
/ * Корак 3. Ме успремник за читање * /
дужина = читање (фд, бафер, БУФ_ЛЕН);
 
/ * Корак 4. Обрадите догађаје који су се догодили * /
Док сам 
струцт инотифи_евент * догађај = (струцт инотифи_евент *) & буффер [и];
 
иф (евент-> лен)
иф (евент-> маск & ИН_ЦРЕАТЕ)
иф (евент-> маск & ИН_ИСДИР)
принтф ("Директоријум% с је створен.\ н ", догађај-> име);

елсе
принтф ("Датотека% с је креирана.\ н ", догађај-> име);


иначе ако (евент-> маск & ИН_ДЕЛЕТЕ)
иф (евент-> маск & ИН_ИСДИР)
принтф ("Директоријум% с је избрисан.\ н ", догађај-> име);

елсе
принтф ("Датотека% с је избрисана.\ н ", догађај-> име);


иначе ако (евент-> маск & ИН_МОДИФИ)
иф (евент-> маск & ИН_ИСДИР)
принтф ("Директоријум% с је измењен.\ н ", догађај-> име);

елсе
принтф ("Датотека% с је измењена.\ н ", догађај-> име);



и + = ЕВЕНТ_СИЗЕ + евент-> лен;


Излаз:

Да бисмо извршили програм и видели излаз, прво морамо отворити два терминала. За покретање програма користи се један терминал Инотифи.ц. У другом терминалу идемо на пут који посматра Инотифи.ц. Ако креирамо било који директоријум или датотеку, изменимо било коју датотеку или избришемо било који директоријум или датотеку, видећемо их на првом терминалу.

У Инотифи.ц на пример, унистд.х датотека заглавља се користи за читати() и Близу() функција, стдлиб.х датотека заглавља се користи за излаз () функција, сигнал.х датотека заглавља се користи за сигнал () функција и СИГ_ИНТ макро (погледајте детаље о руковању сигналом) и фцнтл.х датотека заглавља се користи за фцнтл () функцију.

Изјављујемо фд (инотифи инстанце) и вд (ватцх дескриптор) као глобалне променљиве тако да су овим променљивим доступне све функције.

Тхе фцнтл () функција се користи тако да када читамо помоћу фд дескриптор, нит неће бити блокиран.

Даље, додајемо сат помоћу инотифи_адд_ватцх () функцију. Овде пролазимо фд, путању директоријума који ће се гледати и маску. Можете проследити маску догађаја које желите да надгледате користећи бит-ОР.

Сада прочитајте бафер. Информације о једном или више догађаја чувају се у баферу. Све догађаје можете обрадити један по један помоћу петље. Можете проверити евент-> маску да бисте знали која врста догађаја се догодила.

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

Ми користимо СИГ_ИНТ сигнал (притисните Цтрл + Ц) да бисте изашли из процеса. Када притиснете Цтрл + Ц, тастер сиг_хандлер () позива се функција (за детаље погледајте Управљање сигналом). Ова функција уклања дескриптор сата, затвара инстанцу инотифи фд, и излази из програма.

Закључак

Можете користити Инотифи АПИ у својим апликацијама за надгледање, отклањање грешака, аутоматизацију и још много тога, на свој начин. Овде смо видели ток извршавања АПИ-ја Инотифи.

Како се користи ГамеЦонкуерор Цхеат Енгине у Линуку
Чланак покрива водич о коришћењу ГамеЦонкуерор варалице у Линуку. Многи корисници који играју игре на Виндовс-у често користе апликацију „Цхеат Енгине...
Најбољи емулатори играће конзоле за Линук
Овај чланак ће навести популарни софтвер за емулацију играће конзоле доступан за Линук. Емулација је слој компатибилности софтвера који опонаша хардве...
Најбољи Линук Дистрос за игре у 2021
Линук оперативни систем далеко је превалио свој изворни, једноставни изглед заснован на серверима. Овај ОС се изузетно побољшао последњих година и сад...