Linux有三种方法解决并发式IO
1、非阻塞IO:
2、多路复用IO:后面讲
3、异步通知(异步IO):后面讲
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
int main(void)
{
char buf[200] = {0};
int fd = -1, flag = -1, ret = -1;
//读鼠标
fd = open("/dev/input/mouse1", O_RDONLY | O_NONBLOCK);
if(fd < 0)
{
perror("open");
return -1;
}
//读键盘
flag = fcntl(0, F_GETFL);
flag = flag | O_NONBLOCK;
fcntl(0, F_SETFL, flag);
while(1)
{
//读鼠标
memset(buf, 0, sizeof(buf));
ret = read(fd, buf, 5);//此处注意:0是标准输入,1是标准输出,2是标准错误
if(ret > 0)
{
printf("mouse buf is [%s].\n", buf);
}
//读键盘
memset(buf, 0, sizeof(buf));
ret = read(0, buf, 5);//此处注意,返回值是0说明读出来的是空文件
if(ret > 0)
{
printf("keyboard buf is [%s].\n", buf);
}
}
return 0;
}