#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
#define MSG_TRY "try again\n"
int main()
{
char buf[10] = {0};
int n = 0;
int flags = 0;
///這裏獲取STDIN_FILENO(標準輸入)的文件屬性(也可以獲取其他文件的文件屬性)
flags = fcntl(STDIN_FILENO, F_GETFL);
flags |= O_NONBLOCK;/// 或上非阻塞
if (fcntl(STDIN_FILENO, F_SETFL, flags) == -1)///重新設置文件屬性
{
perror("fcntl");
exit(1);
}
tryagain:
n = read(STDIN_FILENO, buf, 10);
if (n <0)
{
if (errno == EAGAIN)
{
sleep(1);
write(STDOUT_FILENO, MSG_TRY, strlen(MSG_TRY));
goto tryagain;
}
perror("read stdin");
exit(1);
}
write(STDOUT_FILENO, buf, n);
return 0;
}