non penso che sia possibile fare un programma complesso in C senza usare variabili globali, sarebbe probabilmente diverso se tu utilizzassi il C++ .
In effetti con la fork il figlio lavora con una copia del programma e quindi la tua variabile globale diventa globale solo per il figlio.
Per non avere questo effetto dovresti usare il thread, insieme a mutex e semafori per sincronizzare l'accesso alle variabili globali. Questo però ti complica un po' il programma.
ciao
sergio