/ / Vrátenie hodnoty z podriadeného procesu jeho rodičovi v jazyku C vytvorenom vidlicou () - c, súbežnosťou, vidlicou

Vracia hodnotu z podriadeného procesu do rodičovského jazyka C vytvoreného pomocou vidlice () - c, súbežnosti, vidlice

Učenie o vidlicovaní s C.

Môžem splodiť detský proces fork() poriadku. Predpokladajme, že vykonáva nejaký výpočet. Keď sa robí výpočet, ja "d rád, že zomrieť a vrátiť výsledok (niektoré int) materskej spoločnosti. Ako sa to dá urobiť?

Za normálnych okolností som odoslal kód môjho postupu, ale to je doslova:

int main () {
pid_t  pid = fork();
if (pid == 0) {
// I"m a child!
int calculation = 10 + 10;
// <----- Return 20 to the parent?
}else{
// I am the parent, and I am waiting to receive a 20
}
exit(0);
}

odpovede:

1 pre odpoveď č. 1

Nemôžete to urobiť, pretože exit udáva iba výstupný kód (ktorý by mal byť zvyčajne EXIT_SUCCESS a má len 7 bitov). A výstupný kód je jediná vec, ktorú proces vracia (pozri waitpid (2), ktoré by ste mali vždy zavolať, aby ste sa vyhli zombie procesy).

Mohli by ste mať rodičovský a podriadený proces používať nejakú zdieľanú pamäť a semafory (pozri shm_overview (7) & sem_overview (7)), ale je to zložité, takže nie je vhodné pre váš prípad.

Najjednoduchšia a pravdepodobne najrýchlejšia cesta je len na použitie potrubie (7)-s (bude zriadené pred fork) a nechať dieťa proces vytlačiť na jeho stdout potrubia a rodičovský proces na potrubí. vidieť potrubie (2) a tiež popen (3).

Možno budete chcieť fork niekoľko paralelne spracúva procesy (najviac tucet na pracovnej ploche). Potom musíte "multiplexovať svoje vstupy do potrubia. Na to máte nejakú slučku udalostí a použitie." poll (2) v rodičovskom procese pre multiplexovanie.

Prečítajte si tiež Pokročilé programovanie Linuxu


1 pre odpoveď č. 2

Okrem potrubia a vidlice je najjednoduchšou metódou použiť popen () a čítať odpoveď dieťaťa na stdout ako prúd SÚBOROV.

Nemusíte sa zaoberať vidličkou vôbec. (Aj keď sa topoľ realizuje na vrchole vidlice a rúry a dup2).

pclose () môže byť použitý na kontrolu výstupného statusu dieťaťa.