Linux I/O模型 与 Java I/O模型、驱动中的异步函数 的区别。
2016-05-23 22:14
579 查看
主要欣赏 Linux 异步I/O 与 Java 的 异步 I/O 设计的精彩之处。
它会挂起调用的进程,直到异步的请求完成,数组中的任何一个异步I/O请求完成,aio_suspend都会返回。
那么,下面的一个小例子来实验 验证。
Linux 异步IO
1 : aio_suspend()它会挂起调用的进程,直到异步的请求完成,数组中的任何一个异步I/O请求完成,aio_suspend都会返回。
那么,下面的一个小例子来实验 验证。
#include <stdio.h> #include <stdlib.h> #include <string.h> ?#include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <aio.h> #define BUFFER_SIZE 1024 #define MAX 2 #define ERR_EXIT(m)\ do\ {\ perror(m);\ exit(EXIT_FAILURE);\ }while(0) int main(void) { struct aiocb lee_aiocb,lee_aiocb2; const struct aiocb * cblist[MAX]; int fd ; fd = open("/dev/input/event2",O_RDWR); if(fd < 0){ ERR_EXIT("open"); } memset(&my_aiocb,0,sizeof(lee_aiocb)); memset(&my_aiocb2,0,sizeof(lee_aiocb2)); memset(cblist,0,sizeof(cblist)); cblist[0] = &lee_aiocb; cblist[1] = &lee_aiocb2 lee_aiocb.aio_fildes = fd; lee_aiocb.aio_nbytes = BUFFER_SIZE; lee_aiocb.aio_offset = 0; lee_aiocb.aio_buf = malloc(BUFFER_SIZE + 1 ); if(!lee_aiocb.aio_buf){ ERR_EXIT("malloc"); } lee_aiocb2.aio_fildes = 0; // 0 标准输入 lee_aiocb2.aio_nbytes = BUFFER_SIZE; lee_aiocb2.aio_offset = 0; lee_aiocb.aio_buf = malloc(BUFFER_SIZE + 1); if(!lee_aiocb.aio_buf){ ERR_EXIT("malloc"); } ret = aio_read(&lee_aiocb); if(ret < 0){ ERR_EXIT("aio_read"); } aio_read(&lee_aiocb2); printf("before aio_suspend\n"); ret = aio_suspend(cblist,2,NULL); if(ret < 0){ ....... } printf("after aio_suspend\n"); close(fd); return 0; }
IO多路复用模型
信号驱动IO模型
相关文章推荐
- linux实践——内核编程 基础模块
- kalilinux安装lantern
- kalilinux 更新
- Linuxc编程的常用关键字 register ,static ,extern ,const ,typedef
- Linux堆内存管理深入分析
- Kali Linux 教程 之 Kali Linux 更新源
- Centos 6.5 本地局域网基于FTP搭建YUM
- linux环境下GDB与core dump调试程序方法
- CentOS 7之Systemd详解之服务单元设置system.service
- Linux:内核模块实现替换系统调用的简单例子
- 《linux内核设计与分析》内核模块编程
- centos6.5 运行可执行.sh
- Windows 7 Ultimate和Linux Ubantu 16.04双系统安装笔记
- 文件共享服务之NFS
- linux下core文件设置(转)
- git 多用户
- Linux IO chatter
- linux 引导win7
- linux 下基本的I/O系统函数
- arm-linux-gcc交叉编译工具链安装