Кажется, вы хотите, чтобы потоки прекратили блокировать на fgetc(stdin)
, когда происходит какое-то событие для обработки этого события. Если это так, вы можете select()
как для stdin
, так и для другого канала сообщений, чтобы поток мог обрабатывать ввод из обоих:
fd_set descriptor_set
FD_ZERO(&descriptor_set);
FD_SET(STDIN_FILENO, &descriptor_set);
FD_SET(pipefd, &descriptor_set);
if (select(FD_SETSIZE, &descriptor_set, NULL, NULL, NULL) < 0)
{
// select() error
}
if (FD_ISSET(STDIN_FILENO, &descriptor_set)) {
// read byte from stdin
read(STDIN_FILENO, &c, 1);
}
if (FD_ISSET(pipefd, &descriptor_set))
// Special event. Do something else
Также обратите внимание, что только один поток в вашем процессе должен читать из stdin
.