fgets()
является функцией блокировки, она предназначена для ожидания получения данных.
Если вы хотите выполнить асинхронный ввод-вывод, вы можете использовать select()
, poll()
или epoll()
.А затем выполните чтение из дескриптора файла, когда есть доступные данные.
В этих функциях используется дескриптор файла дескриптора FILE *, полученный с помощью:
int fd = fileno(f);
Если вы используете Unixили Linux, то одним из решений может быть пометка дескриптора файла, используемого файлом как неблокирующего.Пример:
#include <fcntl.h>
FILE *handle = popen("tail -f /als/als_test.txt", "r");
int fd = fileno(handle);
flags = fcntl(fd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(fd, F_SETFL, flags);
fgets
теперь должен быть неблокирующим, возвращать нулевое значение и устанавливать для вас код ошибки.