De exemplu poti folosi execv. Sau, daca vrei ca numele executabilului pe care ai de gand sa il rulezi sa fie cautat in PATH, poti folosi execvp.
Procesul parinte poate transmite informatiile catre procesul copil printr-un pipe, de exemplu, daca asta era intrebarea ta.
Procesul parinte trebuie sa astepte terminarea procesului copil folosind o functie precum wait() (sau o varianta a ei) sau waitpid(). Altfel te poti trezi ca ramai cu procese zombie. Tu nu faci asta.
Un rezumat:
- creezi un pipe
- in main se executa fork()
- ai doua procese: parinte si copil
- procesul parinte scrie in pipe informatiile necesare procesului copil (doua numere si un nume de fisier)
- procesul copil citeste din pipe informatiile trimise de catre procesul parinte
- procesul copil foloseste una din variantele de functie exec si lanseaza in executie fisierul executabilul al carui nume a fost trimis de catre procesul parinte, cu argumentele trimise
- parintele asteapta sa se termine executia copilului apeland wait() sau una din variante, sau waitpid()
Parintele poate fi si notificat asincron cand se termina executia procesului copil, doarece se emite un semnal SIGCHLD, pentru care poate sa inregistreze un signal handler. Iar in signal handler sa apeleze wait() sau waitpid()
BTW, vezi ca nu postezi unde trebuie. Intrebarile de programare C se pun aici:
http://www.skullbox.info/6/Codul scris de tine mai sus arata neintelegerea unor concepte de baza privind programarea C. Sugerez sa te concentrezi mai mult pe studiul limbajului.