logo

Execvp() funkcija C

Funkcija execvp () ir spēcīgs sistēmas izsaukums C programmēšanas valodā, kas ļauj aizstāt pašreizējo procesu ar jaunu procesu, kas norādīts sniegtajā komandā. Tā ir daļa no galvenes faila unistd.h un parasti tiek izmantota operētājsistēmās, kuru pamatā ir Unix. Nosaukums 'execvp' nozīmē 'izpildīt failu (ar ceļu)' un 'mainīgos argumentus (nodots kā masīvs)'.

Funkcijas execvp () sintakse ir šāda:

 int execvp(const char *file, char *const argv[]); 

Faila parametrs apzīmē izpildāmā faila nosaukumu vai ceļu. Argv parametrs ir rakstzīmju norādes masīvs, kas attēlo argumentus, kas jānodod jaunajam procesam. Pēdējais argv masīva elements ir jāiestata uz NULL, lai norādītu argumentu saraksta beigas.

Kad tiek izsaukts execvp(), tas meklē norādīto failu direktorijās, kas norādīti vides mainīgajā PATH. Ja fails tiek atrasts, tas aizstāj pašreizējo procesu ar jauno procesu. Jaunais process sāk izpildīt no norādītā faila sākuma, un argumenti tiek nodoti jaunā procesa funkcijai main().

Funkcija execvp () atgriež -1, ja izpildes laikā rodas kļūda. Šādos gadījumos errno mainīgais ir iestatīts, lai norādītu konkrēto radušos kļūdu. Bieži sastopamās kļūdas ir fails nav atrasts, nepietiekamas atļaujas vai nederīgi argumenti.

Viena no execvp() izmantošanas priekšrocībām ir tā, ka tā ļauj izpildīt programmas, nezinot precīzu ceļu uz izpildāmo failu. Meklējot mainīgo PATH, funkcija automātiski atrod izpildāmo failu, vienkāršojot kodu.

Šeit ir funkcijas execvp() izmantošanas piemērs:

 #include #include int main() { char *const argv[] = {'ls', '-l', NULL}; execvp('ls', argv); // The following code is executed only if execvp fails perror('execvp'); // Print error message return 1; } 

Šajā piemērā mēs izpildām komandu 'ls' ar argumentu '-l', izmantojot execvp(). Ja tas ir veiksmīgs, pašreizējais process tiek aizstāts ar komandu “ls”, un tiek parādīta komandas izvade. Ja rodas kļūda, tiek izsaukta funkcija perror(), lai izdrukātu kļūdas ziņojumu.

Govinda aktieris

Kopumā funkcija execvp () ir noderīgs C programmēšanas rīks citu programmu izpildei procesa ietvaros. Tas nodrošina elastību, vienkāršību un kļūdu apstrādes iespējas, padarot to par būtisku funkciju Unix bāzes izstrādes vidēs.

Iesim cauri kodam un soli pa solim izskaidrosim tā izvadi.

  1. Programma sākas, iekļaujot nepieciešamos galvenes failus: standarta ievades/izvades funkcijām un execvp() funkcijai.
  2. Funkcijā main() tiek deklarēts un inicializēts rakstzīmju rādītāju masīvs argv. Tas atspoguļo argumentus, kas jānodod jaunajam procesam. Šajā gadījumā mums ir divi argumenti: “ls” un “-l”. Pēdējais masīva elements ir iestatīts uz NULL, lai norādītu argumentu saraksta beigas.
  3. Funkcija execvp () tiek izsaukta ar komandu 'ls' un argv masīvu kā argumentus. Šī funkcija meklē komandu “ls” direktorijus, kas norādīti vides mainīgajā PATH, un aizstāj pašreizējo procesu ar komandu “ls”, ja tā tiek atrasta.
  4. Ja funkcija execvp () ir veiksmīga, koda izpilde nekad nesasniegs šo punktu, jo pašreizējais process tiek aizstāts ar jauno procesu. Tāpēc no sākotnējās programmas netiks ģenerēta nekāda izvade.
  5. Ja funkcija execvp() neizdodas, tiek izpildīts šāds kods. Funkcija perror() tiek izsaukta ar argumentu 'execvp', lai izdrukātu kļūdas ziņojumu. Tiks parādīts aprakstošs kļūdas ziņojums, kas norāda kļūmes cēloni.

Pieņemsim, ka sistēmā ir pieejama komanda 'ls' un programma ir kompilēta un izpildīta. Izvade būtu līdzīga izvadei, ko iegūtu, izpildot komandu 'ls -l' terminālī.

Piemēram, ja pašreizējā direktorijā ir faili un direktoriji, izvade varētu izskatīties šādi:

 total 8 -rwxr-xr-x 1 user group 8728 May 17 10:30 program -rw-r--r-- 1 user group 345 May 17 10:29 file.txt drwxr-xr-x 2 user group 4096 May 17 10:29 directory 

Precīza izvade būs atkarīga no tā direktorija satura, kurā programma tiek izpildīta. Komanda 'ls -l' sniedz detalizētu informāciju par failiem un direktorijiem, tostarp atļaujas, īpašumtiesības, lielumu un modifikācijas laikspiedolu.

Ja komanda 'ls' netiek atrasta vai izpildes laikā rodas kļūda, funkcija execvp() neizdosies un funkcija perror() izdrukās atbilstošu kļūdas ziņojumu. Piemēram, tas varētu parādīt kaut ko līdzīgu:

 execvp: No such file or directory 

Tas norāda, ka komandu “ls” nevarēja atrast sistēmas PATH direktorijos.

Tādā veidā kods darbojas un kādu rezultātu no tā var sagaidīt.

Funkcijai execvp() programmā C ir vairākas īpašības, konkrēti lietošanas scenāriji, priekšrocības un trūkumi. Izpētīsim tos:

salīdziniet virknē

Raksturlielumi:

Aizstāj pašreizējo procesu: Kad execvp () tiek veiksmīgi izsaukts, tas aizstāj pašreizējo procesu ar jaunu procesu, ko nosaka sniegtā komanda.

Meklē izpildāmo failu: Tā meklē norādīto failu/komandu direktorijās, kas norādīti vides mainīgajā PATH, novēršot nepieciešamību nodrošināt pilnu ceļu uz izpildāmo failu.

Izmanto mainīgos argumentus: Funkcija pieņem mainīgos argumentus kā masīvu, ļaujot elastīgi nodot argumentus jaunajam procesam.

Ar panākumiem neatgriežas: Ja execvp() ir veiksmīgs, kods pēc tā izsaukšanas netiek izpildīts, jo pašreizējais process tiek aizstāts.

Lietošana:

Procesa izpilde: execvp () parasti tiek izmantots, lai izpildītu citas programmas vai komandas no C programmas. Tas ir īpaši noderīgi, ja vēlaties palaist ārējas programmas ar konkrētiem argumentiem.

Apvalka ieviešana: Funkciju execvp() bieži izmanto čaulas ieviešanā, kur jāizpilda lietotāja komandas.

Priekšrocības:

Vienkāršība un ērtības: Funkcija vienkāršo programmas izpildi, apstrādājot izpildāmā faila meklēšanu un nododot argumentus jaunajam procesam.

Elastīga argumentu nodošana: execvp() ļauj nodot mainīgu argumentu skaitu kā masīvu, atvieglojot jaunajam procesam nododamo argumentu pielāgošanu un pielāgošanu.

Automātiskā ceļa izšķirtspēja: Funkcija automātiski meklē izpildāmo failu PATH direktorijos, novēršot nepieciešamību norādīt pilnu ceļu, tādējādi nodrošinot lielāku elastību un pielāgojamību.

Trūkumi:

Procesa pārtraukšana: Kad execvp() ir izsaukts un veiksmīgs, pašreizējais process tiek aizstāts un kods pēc izsaukšanas netiek izpildīts. Tas var būt trūkums, ja ir jāizpilda svarīgs tīrīšanas vai pēcizpildes kods.

Nav kontroles pār jauno procesu: Kad jaunais process ir izpildīts, sākotnējam procesam nav nekādas kontroles vai redzamības pār tā izpildi, ja vien netiek izmantoti starpprocesu komunikācijas mehānismi.

Ierobežota kļūdu apstrāde: Lai gan execvp() nodrošina kļūdu ziņošanu, izmantojot mainīgo errno, pati funkcija nesniedz detalizētus kļūdu ziņojumus. Lai pareizi apstrādātu kļūdas, ir nepieciešama papildu kļūdu apstrāde un kļūdu ziņojumu drukāšana.

virkne char

Kopumā execvp () ir spēcīga un plaši izmantota funkcija C, lai izpildītu citas programmas vai komandas programmā. Tas vienkāršo programmas izpildes procesu, nodrošina elastību argumentu nodošanā un automātiski atrisina izpildāmo ceļu. Tomēr tam ir ierobežojumi attiecībā uz procesa pārtraukšanu un kļūdu apstrādi, kas jāņem vērā, izmantojot funkciju.

Secinājums

Noslēgumā jāsaka, ka C funkcija execvp() ir spēcīgs sistēmas izsaukums, kas ļauj aizstāt pašreizējo procesu ar jaunu procesu, ko nosaka sniegtā komanda. Tas vienkāršo ārējo programmu vai komandu izpildi, veic izpildāmā faila meklēšanu un nodod argumentus jaunajam procesam.

Funkcijai ir raksturīga spēja meklēt izpildāmos failus PATH direktorijos, mainīgo argumentu izmantošana, kas nodoti kā masīvs, un fakts, ka tā neatgriežas pēc panākumiem. To parasti izmanto procesu izpildei un čaulu ieviešanā.

Execvp() priekšrocības ietver tās vienkāršību, ērtības, elastīgu argumentu nodošanu un automātisku ceļa izšķirtspēju. Tomēr jāņem vērā arī daži trūkumi, piemēram, jaunā procesa kontroles trūkums, ierobežotas kļūdu apstrādes iespējas un pašreizējā procesa pārtraukšana pēc veiksmīgas izpildes.

Kopumā funkcija execvp () ir vērtīgs rīks citu programmu izpildei C programmā. Tas nodrošina ērtības, elastību un automatizētu ceļa izšķirtspēju, padarot to par plaši izmantotu funkciju operētājsistēmās, kuru pamatā ir Unix. Izprotot tā īpašības, lietošanas scenārijus un plusus un mīnusus, varat efektīvi izmantot execvp() jaudu savās C programmās.