write блокирует текущий поток при попытке записать что-либо в мастер pty
Создаю мастера и раба с помощью openpty(&master, &slave, name, NULL, NULL) после чего использую master как поток вывода и записываю большое количество инфы с помощью write. Проблема в том, что при достижении некоего лимита (по видимому заполнение буффера) write блокирует текущий поток пока из slave не будет прочитана информация. Информация быстро устаревает и меня такое поведение программы не устраивает: если информация не была прочитана, то она должна быть просто проигнорирована. Как это сделать?
Ответы (1 шт):
Собственно нашел решение порывшись немного в документации. Для того чтобы write не блокировал поток необходимо поставить мастер в non-blocking mode. Для этого можно использовать функцию fcntl:
int flags = fcntl(master, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(master, F_SETFL, flags);