C Programiranje

POSIX Spawn s C programiranjem

POSIX Spawn s C programiranjem
Spawn je funkcija koja se koristi u POSIX-u za učitavanje i izvršavanje podređenih procesa. Trenutno pokrenut proces u POSIX-u tada će se ili nastaviti ili neće nastaviti izvršavati ove podređene procese i druge procese asinkrono. Kad god se kreira novi potproces, potrebna mu je određena memorija koja će omogućiti izvršenje roditeljskog i podređenog procesa. U sustavima Microsoft Windows, UNIX i Linux postoji određena obitelj mrijesta; i druge obitelji funkcija mrijesta smatraju se neobaveznim produžetkom.

Zašto koristiti POSIX Spawn?

The posix_spawn () i posix_spawnp () funkcije se koriste za stvaranje novog podređenog procesa. Dijete proces zatim izvršava datoteku. POSIX je ove funkcije specificirao kako bi standardizirao metodu stvaranja novih procesa za strojeve koji nemaju podršku za sistemski poziv vilice. Ovi su strojevi obično mali i nedostaju im ugrađeni sustavi za podršku MMU.

Dvije funkcije kombiniraju fork i exec, uz neke dodatne korake koji će izvršiti dijete. Djeluju kao podskup funkcionalnosti, koji se obično postižu vilicom, za sve sistemske pozive i ugrađene sustave kojima takva funkcionalnost nedostaje.

Primjer 1: posix_spawn ()

U ovom ćemo primjeru koristiti funkciju spawn () za stvaranje i izvršavanje novog podređenog procesa. Zatim ćemo objasniti sve relevantne argumente korištene u funkciji.

Argumenti korišteni u primjeru su sljedeći:

Argument Opis
Koristi se za definiranje svih operacija mrijesta.
staza Ime puta koji treba izvršiti.
fd_count Broj unosa s nizom fd_map. Ako je fd_count jednak 0, tada se fd_map zanemaruje. U takvim slučajevima podređeni proces nasljeđuje sve deskriptore datoteka, zanemarujući one koji su modificirani.
fd_map
Niz deskriptora datoteka koje će naslijediti podređeni proces. Ovdje, ako vrijednost fd_count nije 0, tada je fd_map potreban da bi se deskriptori datoteke fd_count doveli do vrhovne vrijednosti OPEN_MAX. Ima:

· Dijete obrađuje unos

· Izlaz

· Vrijednosti pogreške

naslijediti Nasljeđivanje struct pokazuje da korisnici žele da njihov podređeni proces nasljeđuje sve od roditelja.
argv Pokazivač na određeni vektor argumenata. Vrijednost argv [0] ne može biti NULL i mora biti naziv datoteke koja se učitava. Vrijednost argv ne može biti jednaka NULL.
envp Pokazuje na niz pokazivača na znakove. Svaki od pokazivača u ovom nizu ukazuje na varijablu okruženja. Završna točka niza je NULL pokazivač.

Primjer 2: test.c

U sljedećem primjeru kreira se novi podređeni postupak za pokretanje naredbe pomoću / bin / sh -c. To je vrijednost proslijeđena kao prvi argument. The test.c kod je sljedeći:

U gornjem primjeru nazvali smo knjižnice, a zatim mrijesti se.h Zaglavlje. Također ćete vidjeti posix_spawn () pozvan da stvori podređeni proces u gornjem primjeru. The mrijesti se i mrijesti se funkcije se koriste umjesto vilica i izvršiti funkcije. Mrijest () ima fleksibilnost i pruža puno lakoće korisnicima na mnogo načina. Pomalo se razlikuje od sustav() i izvršiti (). Vratit će se i stvoriti svježi dječji proces. U našem primjeru jest pid. Iznad možete vidjeti funkciju čekanja čekanje (), zatim sustav() koristi se. Primijetite da mrijest () i vilica () pozivni procesi su isti, a način implementacije je manje-više jednak za obje funkcije.

Sada ćemo izvršiti primjer pomoću a gcc sastavljač. Također možete koristiti bilo koji drugi kompajler po vašem izboru:

$ sudo gcc test.c -lrt

Zatim pokrenite sljedeće:

$ ./ a.van

Izlaz gornje naredbe izgledat će na sljedeći način:

Dijete pid će se stvoriti, kao što možete vidjeti u gornjem izlazu.

Knjižnica

Libc: Upotrijebite -l c za povezivanje gcc sastavljač. Ovdje primijetite da se ova knjižnica uključuje automatski.

Mrijest ()

The mrijest () funkcija se temelji na POSIX 1003.1d nacrt standarda koji se koristi kao posix_spawn (). C knjižnica uključuje funkcije spawn * (). Ovdje ćemo navesti nekoliko sufiksa, zajedno s njihovim opisima:

e: koristi se kao niz za varijable okoline.

l: koristi se kao NULL-završeni popis argumenata korištenih unutar programa.

p: koristi se za definiranje relativnog puta. Ako staza nema kosu crtu u vrijednosti, tada sustav koristi i pretražuje varijablu okruženja PATH za bilo koji sličan program.

v: djeluje kao vektor argumenata unutar programa.

Mapiranje deskriptora datoteka

U mrijest (), mi vježbamo fd_count i fd_map argumenti za pozivanje deskriptora datoteke. Određuje koje dijete treba naslijediti.

Broj koji se koristi kao deskriptor datoteke za podređeni proces ovisi o njegovom mjestu unutar fd_map. Ovdje ćemo razmotriti primjer roditelja s deskriptorima datoteka vrijednosti 1, 3 i 5, tada će mapiranje biti otprilike ovako:

>> int fd_map = 1, 3, 5;
Za dijete Za roditelja
0 1
1 3
2 5

Imajte na umu da ako koristite eksplicitno fd_map da biste podudarali ove deskriptore datoteka s djetetom i roditeljem, tada morate mapirati SPWAN_FDCLOSE funkcija za nastavak.

Nasljedne zastave

U Spawnu, korisnici trebaju zazvati bilo koju od sljedećih zastavica u slučaju nasljeđivanja. U nastavku su navedeni neki primjeri zastava Spawn i njihovi opisi:

Zastava Opis
SPAWN_ALIGN_DEFAULT Ova se zastava koristi za postavljanje zadanih postavki postavki za poravnanje.
SPAWN_ALIGN_FAULT Ova se zastava koristi za pogrešno usklađivanje referenci podataka.
SPAWN_ALIGN_NOFAULT Ova se zastava koristi za ispravljanje neusklađenosti kvara.
SPAWN_DEBUG Ova se zastava koristi za otklanjanje pogrešaka u jezgri.
SPAWN_EXEC SPAWN se ponaša poput exec * () koristeći ovu zastavu.
SPAWN_EXPLICIT_CPU Ova se zastava koristi za postavljanje maske pokretanja i nasljeđivanje člana mask = run maske.
SPAWN_EXPLICIT_SCHED Ova se zastava koristi za postavljanje pravila rasporeda.

The <mrijesti se.h> definira tu masku SPAWN_ALIGN_MASK koristi se za poravnavanje gore navedenih zastavica.

pid_t pgroup Podređena procesna grupa ako u članu zastave navedete SPAWN_SETGROUP.
int runmask Maska pokretanja podređenog postupka za nasljeđivanje maski dogovorenih na temelju vrijednosti ovog člana.
sigset_t sigmask Signalna maska ​​za podređeni postupak koja se koristi za specificiranje statusa članova zastave.
sigset_t sigdefault Skup podređenih procesa zadanih signala.

Pogreške

The posix_spawn () i posix_spawnp () funkcije također mogu zakazati u nekim slučajevima, poput sljedećih:

EINVAL: To je slučaj kada vrijednost identificirana pomoću datoteka_akcije ili attrp nije ispravan i adekvatan.

Kada osnovna vilica (2), vilica (2) ili klon (2) ne uspije, mrijest () funkcije će vratiti broj pogreške.

ENOSYS: To je slučaj ako funkcija i njena podrška nisu uključeni ili osigurani unutar sustava.

Zaključak

Ovaj je vodič obuhvatio osnovne funkcionalnosti koje pruža POSIX_spawn () i funkcije koje koristi za izvršavanje i izvršavanje svojih funkcija. Također smo pokrili zastave i pogreške koje Spawn često koristi.

OpenTTD vs Simutrans
Stvaranje vlastite simulacije prijevoza može biti zabavno, opuštajuće i izuzetno primamljivo. Zbog toga morate isprobati što više igara kako biste pro...
Vodič za OpenTTD
OpenTTD je jedna od najpopularnijih igara za poslovnu simulaciju. U ovoj igri morate stvoriti prekrasan prijevoznički posao. Međutim, počet ćete u poč...
SuperTuxKart za Linux
SuperTuxKart sjajan je naslov osmišljen kako bi vam besplatno pružio iskustvo Mario Kart na vašem Linux sustavu. Prilično je izazovno i zabavno igrati...