Кто-нибудь знает, почему выполнение следующего кода может привести к тому, что все будущие вызовы read () для этого fd (который является stdin) будут немедленно возвращать 0 вместо блокировки ввода?
termios newTerminalSettings;
tcgetattr(inFd, &newTerminalSettings);
newTerminalSettings.c_lflag &= ~ICANON;
tcsetattr(inFd, TCSANOW, &newTerminalSettings);
Удаление строки tcsetattr приводит к тому, что read () работает как положено.
Также пробовал:
fcntl(inFd, F_SETFL, 0);
без удачи.
Обратите внимание, что в настоящее время у меня есть 2 разных терминала,При запуске приложения в одном из них чтение сразу же возвращается.Запуск его в другом вызывает чтение, чтобы заблокировать для ввода.Что бы это могло быть?
Заранее спасибо: -)
Источник воспроизведения:
#include <iostream>
#include <termios.h>
using namespace std;
int main(void) {
termios newTerminalSettings;
tcgetattr(0, &newTerminalSettings);
newTerminalSettings.c_lflag &= ~ICANON;
tcsetattr(0, TCSANOW, &newTerminalSettings);
char readBuf[5000];
cout << "read returned: " << read(0, readBuf, sizeof(readBuf));
return 0;
}