有谁知道为什么运行以下代码可能会导致该 fd(即标准输入)上的所有未来 read() 调用立即返回 0 而不是阻塞输入?
termios newTerminalSettings;
tcgetattr(inFd, &newTerminalSettings);
newTerminalSettings.c_lflag &= ~ICANON;
tcsetattr(inFd, TCSANOW, &newTerminalSettings);
删除 tcsetattr 行使 read() 按预期工作。
也试过:
fcntl(inFd, F_SETFL, 0);
没有运气。
请注意,我目前有 2 个不同的终端。在其中一个中运行应用程序会导致 read 立即返回。在其他情况下运行它会导致 read 阻塞输入。会是什么呢?
提前致谢 :-)
复制来源:
#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;
}