Kā izmantot atvērtās sistēmas zvanu C

How Use Open System Call C



Sistēmas izsaukumi tiek izmantoti Linux izplatījumos, lai nodrošinātu ieeju Linux OS un programmās. Linux operētājsistēma izmanto Glibc bibliotēku, lai tajā atbalstītu sistēmas zvanus, vienlaikus izmantojot C valodu. Ir arī daudz vairāk veidu, kā izmantot sistēmas zvanus. Šajā raksta rokasgrāmatā mēs apspriedīsim atvērtās sistēmas zvanu Linux sistēmā. Atvērtās sistēmas izsaukums tika izmantots, lai ātri atvērtu ceļā norādīto failu. Tas mums paziņoja par lietotāja izveidota faila faila deskriptoru. Mēs izmantojām Ubuntu 20.04, lai saņemtu praktisku atvērtās sistēmas zvanu.

Instalējiet bibliotēkas

C valodai kā priekšnoteikums ir jāinstalē dažas papildu bibliotēkas pakotnes. Pirmkārt, jums jāinstalē pakete manpages-dev, lai pārbaudītu informāciju par sistēmas zvaniem. Atveriet komandrindas termināli no darbības apgabala un izpildiet tālāk sniegto instrukciju, lai instalētu lapas.







$ sudo apt instalēšanas lapas-dev



Instalācijas pabeigšanas rezultāts ir norādīts zemāk.







Tagad mēs pārbaudīsim atvērtās sistēmas zvanu, izmantojot komandu man, kā norādīts zemāk.

$ cilvēks2atvērts



Tālāk ir parādīta atvērtās sistēmas izsaukuma izvades lapa. Jūs varat redzēt papildu informāciju par to. Nospiediet pogu q, lai izietu no tās.

Iepriekšējā sintakse parāda pirmās trīs vajadzīgo bibliotēku rindas, kas jāpievieno sistēmas zvaniem. Atvērtās sistēmas zvanam ir pieejamas trīs sintakses. Pirmā sintakse parāda ceļa nosaukumu, kas ir atvērtā faila nosaukums. Otrs parametrs, karodziņi, parāda faila režīmu, piemēram, lasīšanu vai rakstīšanu. Otro sintaksi var izmantot, ja fails neeksistē. Parametru režīms tiek izmantots, lai parādītu faila privilēģijas.

Tagad ir pienācis laiks instalēt GCC kompilatoru C koda atkļūdošanai Ubuntu 20.04 Linux izplatīšanā. Lai to izdarītu, apvalkā izpildiet tālāk sniegto instrukciju.

$ sudo apt instalēt gcc

Lai turpinātu GCC kompilatora instalēšanu, pieskarieties Y, pretējā gadījumā nospiediet pogu n, lai aizvērtu instalāciju. Tāpēc nospiediet y pogu un nospiediet Enter, lai turpinātu.

Pabeigšanas rezultāts ir parādīts zemāk.

01 piemērs

Apskatīsim ļoti vienkāršu atvērtās sistēmas zvana piemēru. Pirmkārt, atveriet komandu apvalku un izveidojiet jaunu teksta failu test.txt, izmantojot vienkāršu pieskāriena komandu šādi:

$pieskartiestest.txt

Pievienojiet tam dažus datus manuāli. Jūs varat redzēt datus failā, izmantojot zemāk esošo komandu cat.

$kaķistest.txt

Tagad izveidosim jaunu C failu, izmantojot apvalkā esošo nano komandu, kā parādīts zemāk.

$nanojauns.c

Tiks atvērts zemāk esošais GNU nano fails. Tajā jāievada zemāk esošais C valodas kods. Jūs varat redzēt, ka esam pievienojuši nepieciešamās bibliotēkas pakotnes, lai C kods tiktu izpildīts pareizi. Pēc tam mēs esam definējuši galveno funkciju, lai strādātu pie atvērtās sistēmas izsaukuma. Mēs esam deklarējuši divus veselus skaitļus. Mainīgais n tiek izmantots bufera vērtību skaitīšanai, bet fd - faila aprakstam. Mēs esam deklarējuši rakstzīmju tipa bufera masīvu kā buf ar izmēru 50. Atvērtās sistēmas izsaukums ir izmantots, lai nolasītu saturu no faila test.txt un atgrieztu to faila aprakstā. O_RDONLY ir izmantots lasīšanai. Nākamajā rindā ir redzams lasīšanas sistēmas zvans, lai savāktu 10 baitus no bufera un atgrieztu to veselā skaitlī n. Arī rakstīšanas komanda ir izmantota, lai ierakstītu saturu vai bufera datus faila aprakstā, kas ir izvades ekrāns Mūsu gadījumā šobrīd. Saglabājiet šo failu, izmantojot Ctrl+S, un aizveriet to, izmantojot komandu Ctrl+X.

#iekļaut
#iekļaut
#iekļaut
#iekļaut

intgalvenais()
{
intn,fd;
charbuf[piecdesmit];
fd=atvērts(pārbaude.txt,O_RDONLY);
n=lasīt(fd,buf, 10);
rakstīt(1 ,buf, 10);

Vispirms apkoposim C kodu atvērtam sistēmas zvanam, izmantojot zemāk esošo komandu gcc.

$gccjauns.c

Tagad ir pienācis laiks pārbaudīt atvērtā sistēmas zvana C koda izvadi. Izmantosim zemāk esošo komandu a.out apvalkā. Rezultātā tiek parādīti 10 baiti no faila test.txt satura.

$./uz.ārā

Ņemsim vēl vienu piemēru, lai viena faila saturu ierakstītu citā failā, izmantojot atvērtās sistēmas zvanu. Lai izveidotu jaunu C failu, izmantojot komandu nano, kā norādīts zemāk.

$ nano jauns.c

Tāpēc ņemiet to pašu kodu ar nelielām izmaiņām tajā. Mēs kodā esam definējuši citu faila aprakstu kā fd1. Viss kods ir vienāds, izņemot vienu papildu rindu. Koda otrā pēdējā rinda izmantoja atvērtās sistēmas izsaukumu, lai izveidotu jaunu failu ar nosaukumu target, izmantojot O_CREAT un režīmu, tikai rakstīt kā O_WRONLY. 0642 parāda šim failam piešķirtās privilēģijas. Un fails ir atgriezts jaunā faila aprakstā. Nākamajā rindā ir parādīta komanda bufera satura baitu ierakstīšanai atbilstoši tā faila aprakstam. Saglabājiet failu un aizveriet to.

Izpildiet komandu gcc compile, lai atkļūdotu C valodas failu.

$ gcc jauns.c

Lai parādītu C koda izvadi, izmēģiniet a.out instrukciju apvalkā, kā norādīts zemāk. Izejas nav, jo izvade ir novirzīta uz jaunizveidoto faila mērķi.

$./uz.ārā

Pārbaudīsim faila mērķa datus, izmantojot komandu cat. Rezultāts parāda, ka failā ir 20 baiti.

$ kaķu mērķis

Secinājums

Iepriekš minētajā apmācībā mēs jums izskaidrojām, kā izmantot atvērtas sistēmas zvanu C valodā, izmantojot gcc kompilatoru. Izmantojot dažādus šajā rokasgrāmatā izskaidrotos piemērus, jūs varēsit īstenot vēlamo programmu.