Системски позиви

Стат Систем Цалл Водич за Линук

Стат Систем Цалл Водич за Линук

Линук системски позиви

Системски позиви које пружа језгро линук излажу се у програмском језику Ц путем глибц.  Када се користи системски позив, комуницирате са ОС-ом и по повратку ОС комуницира са вама кроз параметре који се враћају функцијама системског позива (повратне вредности).

Стат Систем Цалл:

Стат системски позив је системски позив у Линуку за проверу статуса датотеке као што је провера када је датотеци приступљено. Системски позив стат () заправо враћа атрибуте датотеке. Атрибуте датотеке иноде у основи враћа функција Стат (). Иноде садржи метаподатке датотеке. Иноде садржи: врсту датотеке, величину датотеке, када је датотеци приступљено (измењено, избрисано), односно временске ознаке, и путању датотеке, кориснички ИД и ИД групе, везе до датотеке и физичку адресу садржаја датотеке.

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

Синтакса системског позива Ц Стат:

Да бисте користили системски позив стат у програмском језику Ц, морате да укључите следећу датотеку заглавља:

#инцлуде

Стат се користи за добијање статуса датотеке. Синтакса системског позива Ц стат можда неће бити иста за сваки оперативни систем. У Линуку је синтакса за системски позив стат следећа:

инт стат (цонст цхар * путања, струцт стат * буф)

Тип повратка функције у инт, ако се функција изврши успешно, враћа се 0 ако постоје грешке, вратит ће се -1.

Ево цонст цхар * пут наводи име датотеке. Ако је пут до датотеке симболична веза, онда морате да наведете везу уместо имена датотеке.

Тада у функцији имамо а стат структура у којој се чувају подаци или информације о датотеци која користи показивач са именом буф, који се предаје као параметар и попуњава током извршења позива и може се прочитати након позива.

Стат структура:

Стат структура која је дефинисана у датотека заглавља садржи следећа поља:

струцт стат

моде_т ст_моде;
ино_т ст_ино;
дев_т ст_дев;
дев_т ст_рдев;
нлинк_т ст_нлинк;
уид_т ст_уид;
гид_т ст_гид;
офф_т ст_сизе;
струцт тимспец ст_атим;
струцт тимспец ст_мтим;
струцт тимспец ст_цтим;
блксизе_т ст_блксизе;
блкцнт_т ст_блоцкс;
;

Опис:

  1. ст_дев: То је ИД уређаја у којем тренутно имамо своју датотеку.
  2. ст_рдев: Ово поље описује да одређена датотека представља одређени уређај.
  3. ст_ино: То је број иноде или серијски број датотеке. Како је то индексни број, тако би требало да буде јединствен за све датотеке
  4. ст_сизе: ст_сизе је величина датотеке у бајтовима.
  5. ст_атиме: То је последњи пут или недавно време приступања датотеци.
  6. ст_цтиме: То је недавно време када су статус или дозволе датотеке промењени.
  7. ст_мтиме: То је недавно време када је датотека измењена.
  8. ст_блксизе: Ово поље даје жељену величину блока за И / О систем датотека који се може разликовати од датотеке до датотеке.
  9. ст_блоцкс: Ово поље говори укупан број блокова у вишекратницима од 512 бајтова.
  10. ст_нлинк: Ово поље говори укупан број чврстих веза.
  11. ст_уид: Ово поље означава ИД корисника.
  12. ст_гид: Ово поље означава ИД групе.
  13. ст_моде: Означава дозволе за датотеку и говори о начинима рада на датотеци. Следе заставе које треба дефинисати за поље ст_моде:
Заставе Опис Вредност заставе
С_ИФМТ Битмаска која се користи за добијање вредности режима датотеке 0170000
С_ИФСОЦК Константа датотеке сокета 0140000
С_ИФЛИНК Константа датотеке симболичке везе 0120000
С_ИФРЕГ Константа датотеке за редовну датотеку 0100000
С_ИФБЛК Датотека константа за блок датотеку 0060000
С_ИФДИР Константа датотеке за датотеку директорија 0040000
С_ИФЦХР Датотека константа за датотеку знакова 0020000
С_ИФИФО Константа датотеке фифо 0010000
С_ИСУИД Подесите бит корисничког ИД-а 0004000
С_ИСГИД Поставите бит ИД групе 0002000
С_ИСВТКС Лепљиви бит који означава дељени текст 0001000
С_ИРВКСУ Власничке дозволе (читање, писање, извршавање) 00700
С_ИРУСР Прочитајте дозволе за власника 00400
С_ИВУСР Напишите дозволе за власника 00200
С_ИКСУСР Изврши дозволе за власника 00100
С_ИРВКСГ Групне дозволе (читање, писање, извршавање) 00070
С_ИРГРП Прочитајте дозволе за групу 00040
С_ИВГРП Напишите дозволе за групу 00020
С_ИКСГРП Изврши дозволе за групу 00010
С_ИРВКСО Дозволе за друге (читање, писање, извршавање) 00007
С_ИРОТХ Прочитајте дозволе за друге 00004
С_ИВОТХ Напишите дозволе за друге 00002
С_ИКСОТХ Извршите дозволе за друге 00001

Како се користи системски позив Стат:

Следећи пример показује како се користи системски позив стат у програмском језику Ц у Линуку, Убунту.

ПРИМЕР 1:

У следећем коду наћи ћемо начин датотеке:

ШИФРА:

#инцлуде
#инцлуде
инт маин ()

// показивач на стат струцт
струцт стат сфиле;
// стат системски позив
стат ("стат.ц ", & сфиле);
// приступ ст_моде (члан података стат струцт)
принтф ("ст_моде =% о", сфиле.ст_моде);
ретурн 0;

Састављање и покретање програма враћа се као испод:

У овом коду смо проследили име датотеке у системском позиву стат, а затим показивач на стат струцт који је сфиле. Показивач на стат струцт се затим користи за приступ ст_моде који приказује режим датотеке помоћу наредбе принтф.

Датотека заглавља користи се тако да можете користити системски позив стат. Датотека заглавља је стандардна датотека за улаз / излаз библиотеке тако да можете користити принтф или сцанф у свом Ц коду.

ПРИМЕР 2:

У следећем коду ћемо добити информације о датотеци помоћу системског позива стат:

ШИФРА:

#инцлуде
#инцлуде
#инцлуде
#инцлуде
воид сфиле (цхар цонст име датотеке []);
инт маин ()
ссизе_т реад;
цхар * бафер = 0;
сизе_т буф_сизе = 0;
принтф ("Унесите име датотеке за проверу: \ н");
реад = гетлине (& буффер, & буф_сизе, стдин);
ако (читај <=0 )
принтф ("гетлине није успео \ н");
излаз (1);

иф (бафер [реад-1] == '\ н')
бафер [читање-1] = 0;

инт с = отворен (бафер, О_РДОНЛИ);
ако (с == - 1)
принтф ("Датотека не постоји \ н");
излаз (1);

елсе
сфиле (бафер);

бесплатно (бафер);
ретурн 0;

воид сфиле (цхар цонст име датотеке [])
струцт стат сфиле;
иф (стат (име датотеке, & сфиле) == - 1)
принтф ("Догодила се грешка \ н");

// Приступ члановима података стат струцт
принтф ("\ нДатотека ст_уид% д \ н", сфиле.ст_уид);
принтф ("\ нДатотека ст_блксизе% лд \ н", сфиле.ст_блксизе);
принтф ("\ нДатотека ст_гид% д \ н", сфиле.ст_гид);
принтф ("\ нДатотека ст_блоцкс% лд \ н", сфиле.ст_блоцкс);
принтф ("\ нДатотека ст_сизе% лд \ н", сфиле.ст_сизе);
принтф ("\ нДатотека ст_нлинк% у \ н", (унсигнед инт) сфиле.ст_нлинк);
принтф ("\ нФиле Усер Пермиссионс Усер \ н");
принтф ((сфиле.ст_моде & С_ИРУСР)? "р": "-");
принтф ((сфиле.ст_моде & С_ИВУСР)? "в": "-");
принтф ((сфиле.ст_моде & С_ИКСУСР)? "Икс":"-");
принтф ("\ н");
принтф ("\ нФиле Гроуп Пермиссионс Гроуп \ н");
принтф ((сфиле.ст_моде & С_ИРГРП)? "р": "-");
принтф ((сфиле.ст_моде & С_ИВГРП)? "в": "-");
принтф ((сфиле.ст_моде & С_ИКСГРП)? "Икс":"-");
принтф ("\ н");
принтф ("\ нДатотеке дозволе остало \ н");
принтф ((сфиле.ст_моде & С_ИРОТХ)? "р": "-");
принтф ((сфиле.ст_моде & С_ИВОТХ)? "в": "-");
принтф ((сфиле.ст_моде & С_ИКСОТХ)? "Икс":"-");
принтф ("\ н");

ИЗЛАЗ:

У горњи Ц код унели смо име датотеке и ако датотека не постоји, извршење програма ће бити заустављено. То је приказано на следећој слици:

Ако наша датотека постоји, позваће се функција сфиле (н) у коју смо проследили име датотеке. Унутар функције, пре свега користили смо системски позив Стат, ако стат () врати -1, онда мора постојати било каква грешка па ће се порука одштампати и извршење програма зауставити.

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

Тада смо за режим датотеке приступили макроима или заставицама ст_моде. Овде се логички и оператор користе за штампање одговарајућих режима. Проверили смо да ли постоје дозволе за корисника, групу и остале за наведену датотеку (име датотеке је унео корисник).

Овим можете да видите како да користите системски позив стат из програмског језика Ц да бисте из језгра ОС добили информације о датотекама.  Ако имате питање, слободно нам реците путем одељка за коментаре.

Како променити показивач миша и величину, боју и шему курсора на Виндовс 10
Показивач миша и курсор у оперативном систему Виндовс 10 су врло важни аспекти оперативног система. То се може рећи и за друге оперативне системе, так...
Бесплатни и отворени кодни покретачки програми за развој Линук игара
Овај чланак ће обухватити листу бесплатних покретача игара отвореног кода који се могу користити за развој 2Д и 3Д игара на Линуку. Бројни су такви мо...
Водич за сенку Томб Раидера за Линук
Схадов оф тхе Томб Раидер је дванаести додатак серији Томб Раидер - акцијско-авантуристичкој игри коју је створио Еидос Монтреал. И критичари и фанови...