有誰知道爲什麼運行下面的代碼可能導致所有未來的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;
}