有谁知道为什么运行下面的代码可能导致所有未来的read()调用该fd(这是stdin)立即返回0而不是输入阻塞?在标准输入读取()返回EOF而不是等待输入
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;
}