Programy pisane w technologii OUX mają wbudowaną obsługę wywołań procesu dokonywanych z innego procesu OUX. Dzięki temu można łatwo zaimplementować program będący serwerem procedur i program będący klientem procedur; jak to zostało zrobione w programie “current-system-integrator”.
Przychodzące wywołania
Każdy program w technologii OUX zawiera procedurę
void E_flow_Q_process_call_I_func( P data ){ }
Jest ona wykonywana dla przychodzącego wywołania procesu OUX. Jedyny parametr zawiera adres do pamięci współdzielonej, która zawiera dane przekazane przez program wywołujący. Zawartość tej pamięci może być zmodyfikowana przed powrotem z procedury “E_flow_Q_process_call_I_func” i w ten sposób dane są przekazywane zwrotnie programowi wywołującemu.
Wychodzące wywołania
By wywołać proces innego programu OUX, trzeba utworzyć obiekt “process_call”:
P data; I call_id = E_flow_Q_process_call_M( l, &data );
Pierwszy parametr zawiera rozmiar żądanej pamięci współdzielonej pomiędzy procesami, drugi parametr to adres zmiennej, której zostanie przypisany adres tej utworzonej pamięci współdzielonej. Natomiast procedura ta w przypadku niepowodzenia wraca z wartością ~0, a w przeciwnym przypadku – z identyfikatorem obiektu “process_call”.
Od tego momentu można dowolną liczbę razy wywoływać inny program lub programy OUX, zważając na to, by nie nadpisywały sobie danych w pamięci współdzielonej. Używa się do tego celu procedury
B successful; E_flow_Q_process_call_I( call_id, server_pid, &successful );
Pierwszy parametr zawiera identyfikator utworzonego obiektu “process_call”, drugi parametr – identyfikator procesu w systemie operacyjnym przynależący do uruchomionego innego programu OUX, a trzeci – adres zmiennej, której zostanie przypisana wartość boolean powodzenia lub niepowodzenia wykonania wywołania programu OUX. Trzeba tutaj zaznaczyć, że jest to powodzenie lub niepowodzenie wynikające z odebrania przez inny program OUX wywołania, a nie z wykonania czegoś w wyniku tego wywołania. Rezultat wykonania jest na przykład ustawiany w pamięci współdzielonej przez program wywołany.
Jeżeli procedura “E_flow_Q_process_call_I” wróci z wartością yes, to należy zakończyć pętlę zadania, w którym jest ona wykonywana.
Po zakończeniu jednego lub serii wywołań należy wyrzuć obiekt “process_call” procedurą
E_flow_Q_process_call_W( call_id );