Czy interfejs socketów przypomina interfejs streamów?
Wszystko w Uniksach zachowuje się jak surowy potok (czyli jedziesz po tym read/write i pochodnymi) albo jak interfejs komunikatowy (czyli jedziesz po tym sendmsg/rcvmsg i pochodnymi).
Co do fprintf, struktura
FILE* i funkcje na niej działające to zło wcielone (TM). Zamiast nich korzystaj z właściwszych dla Uniksowatych funkcji pracujących na uchwytach (np dprintf). Z tego punktu widzenia czy uchwyt jest do gniazda, strumienia TCP, pliku, partycji czy potoku, to korzystasz z niego tak samo.
Co do pierwotnego problemu: masz dwie drogi:
- tworzysz dwa FIFO, qt2lua i lua2qt. Startujesz oba programy niezależnie i opitalasz komunikację przez fifo.
- Program w QT tworzy dwukierunkowy potok przez funkcję socketpair(2) albo dwa razy pipe(2), forkuje się i z forka odpala skrypt LUA. Wtedy masz 2 niezależne programy omunikujące sięp przez potoki.
Wydaje mi się, że przez logikę forkowania aplikacji Qt-kowej, prostsze będzie rozwiązanie #1.