Linux异步IO的简单应用
2015-12-02 16:19
405 查看
Linux异步IO的简单应用
最近在学习linux下的异步io编程,与多线程阻塞相比,异步非阻塞大大提高了程序的效率详细教程在这里
#include <stdio.h> #include <aio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> int falg = 1; void callBack(sigval_t sig) { struct aiocb *my_aiocb = (struct aiocb*)sig.sival_ptr; if (aio_error(my_aiocb) == 0) { int ret = aio_return(my_aiocb); if (ret > 0){ char *data = (char*)my_aiocb->aio_buf; data[my_aiocb->aio_nbytes] = '\0'; printf("input:%s\n", data); flag = 0 } } } int main(void) { struct aiocb my_aiocb; bzero((void*)&my_aiocb, sizeof(struct aiocb)); my_aiocb.aio_buf = malloc(64); //开辟缓冲区 my_aiocb.aio_nbytes = 64; //设置缓冲区大小 my_aiocb.aio_offset = 0; //偏移量 my_aiocb.aio_fildes = 0; //文件标识,0表示标准输出 my_aiocb.aio_sigevent.sigev_notify_function = callBack; //设置回调函数 my_aiocb.aio_sigevent.sigev_notify_attributes = NULL; //属性 my_aiocb.aio_sigevent.sigev_notify = SIGEV_THREAD; //选择回调函数的方式而不是信号 my_aiocb.aio_sigevent.sigev_value.sival_ptr = (void*)&my_aiocb; printf("请输入\n"); aio_read(&my_aiocb); while(flag) { printf("你爱输不输\n"); sleep(2); } }
使用异步io可以在等待输入的同时做别的事,而不是一直阻塞在那里。
编译的时候要注意加上-lrt的链接选项
gcc main.c -o main -lrt
程序运行结果:
相关文章推荐
- Linux socket 初步
- linux lsof详解
- linux 文件权限
- Linux 执行数学运算
- 10 篇对初学者和专家都有用的 Linux 命令教程
- Linux 与 Windows 对UNICODE 的处理方式
- Ubuntu12.04下QQ完美走起啊!走起啊!有木有啊!
- 解決Linux下Android开发真机调试设备不被识别问题
- 运维入门
- 运维提升
- Linux 自检和 SystemTap
- Ubuntu Linux使用体验
- c语言实现hashmap(转载)
- Linux 信号signal处理机制
- linux下mysql添加用户
- Scientific Linux 5.5 图形安装教程
- 基于 Linux 集群环境上 GPFS 的问题诊断
- 谁是桌面王者?Win PK Linux三大镇山之宝
- vivi下重新调整分区