#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;
}