以下のコードは IO のノンブロッキング読み取りの例ですがterminal
、コンソールに文字を入力してもすぐには出力されません。以前に を設定する必要があるとあなたが言うかもしれないので、stty -icanon
標準モードは無効になっていstty icanon
ます。 、文字を入力すると、 fd が読み取り可能になるため、すぐに文字が出力されます。character-oriented
cannonical
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#define MSG_TRY "try again\n"
int main(void)
{
char buf[10];
int fd, n;
fd = open("/dev/tty", O_RDONLY|O_NONBLOCK);
if(fd<0) {
perror("open /dev/tty");
exit(1);
}
tryagain:
n = read(fd, buf, 10);
if (n < 0) {
if (errno == EAGAIN) {
sleep(1);
write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
goto tryagain;
}
perror("read /dev/tty");
exit(1);
}
write(STDOUT_FILENO, buf, n);
close(fd);
return 0;
}