Я внедряю систему, которая запускает игровые серверы. У меня есть процесс («игровой контроллер»), который создает две пары каналов и разветвляет ребенка. Ребенок переводит свой STDIN в один канал, а STDOUT и STDERR в другой, затем запускает execlp()
для запуска кода игры.
В игровом контроллере будет два потока. Первый будет блокировать в accept()
на именованном сокете UNIX, получающем входные данные от другого приложения, а второй поток блокирует read()
, отсылая канал ошибок и ошибок с игрового сервера.
Иногда первый поток получает команду на отправку строки в канал stdin игрового сервера. На этом этапе каким-то образом мне нужно остановить второй поток на read()
ing, чтобы первый поток мог прочитать ответ из канала out и error.
(Стоит отметить, что я буду знать, сколько символов / строк длинно в ответе, поэтому я буду знать, когда прекратить чтение и позволить второму потоку возобновить чтение, сбрасывая процесс.)
Как временно переключить управление чтением на другой поток, как указано выше?