linux下异步IO的简单例子【转】
转自:http://blog.chinaunix.net/uid-24567872-id-87677.html
首先,贴一下异步IO中用的的一些结构体,因为平常很少用,整理起来方便查看。
aio.h中的struct aiocb
|
/* Internal members. */ |
siginfo.h中的struct sigevent和union sigval
|
union /* When SIGEV_SIGNAL and SIGEV_THREAD_ID set, LWP ID of the struct /* POSIX names to access some of the members. */ |
|
|
例子1:
|
void async_read(int s, siginfo_t * info, void * context) int main(void) sigaction(SIGUSR1, &act, NULL); bzero(&cb, sizeof(cb)); cb.aio_fildes = 0; cb.aio_sigevent.sigev_value.sival_ptr = &cb; return 0; |
运行结果:
注意:要加相应的库,-lrt
|
$ ./gcc -o test aio_signal.c -lrt
|
例子2:
|
void async_read(sigval_t val) int main(void) bzero(&cb, sizeof(cb)); cb.aio_fildes = 0; cb.aio_sigevent.sigev_value.sival_ptr = &cb; ret = aio_read(&cb); return 0; |
运行结果同上。
linux下异步IO的简单例子【转】的更多相关文章
- Linux下libaio的一个简单例子
转载:http://www.cnblogs.com/aLittleBitCool/archive/2011/10/18/2216646.html 异步io,很好玩的一个东西,从接口来看,封装的比较厉害 ...
- linux 下 异步IO
方法一:使用fcntl来置O_ASYNC位. 这个方法的效果是,当输入缓存中的输入数据就绪时(输入数据可读),内核向用F_SETOWN来绑定的那个进程发送SIGIO信号.此时程序应该用getchar等 ...
- Linux下的IO监控与分析
Linux下的IO监控与分析 近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performan ...
- linux下的IO模型---学习笔记
1.linux文件系统和缓存 文件系统接口 文件系统-一种把数据组织成文件和目录的存储方式,提供了基于文件的存取接口,并通过文件权限控制访问. 存储层次 文件系统缓存 主存(通常时DRAM)的一块区域 ...
- Linux下的IO模式
对于一次IO访问(以read举例),数据会先被拷贝到操作系统内核的缓冲区中,然后才会从操作系统内核的缓冲区拷贝到应用程序的地址空间.所以说,当一个read操作发生时,它会经历两个阶段:1. 等待数据准 ...
- Linux下面的IO模型
1. Linux下的五种I/O模型 阻塞I/O模型: 一直阻塞 应用程序调用一个IO函数,导致应用程序阻塞,等待数据准备好. 如果数据没有准备好,一直等待….数据准备好了,从内核拷贝到用户空 ...
- Linux下getopt()函数的简单使用
最近在弄Linux C编程,本科的时候没好好学啊,希望学弟学妹们引以为鉴. 好了,虽然啰嗦了点,但确实是忠告.步入正题: 我们的主角----getopt()函数. 英雄不问出处,getopt()函数的 ...
- 【转载】Linux下的IO监控与分析
近期要在公司内部做个Linux IO方面的培训, 整理下手头的资料给大家分享下 各种IO监视工具在Linux IO 体系结构中的位置 源自 Linux Performance and Tuning G ...
- Linux下控制器IO地址
在Linux下使用cat /proc/ioports可以查看控制器使用的IO地址范围
随机推荐
- 构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock
构建LINUX下的入侵检测系统——LIDS 系统管理命令--vlock http://blog.chinaunix.net/uid-306663-id-2440200.html LIDS官方网站: ...
- nohup和&的区别
nohup和&的区别http://bbs.chinaunix.net/forum.php?mod=viewthread&tid=4241330&fromuid=21288388 ...
- mysql 快速生成百万条测试数据
1.生成思路 利用mysql内存表插入速度快的特点,先利用函数和存储过程在内存表中生成数据,然后再从内存表插入普通表中 2.创建内存表及普通表 CREATE TABLE `vote_record_me ...
- iOS让数组内对象执行同一方法
// 让数组中的所有对象都执行removeFromSuperview方法 [self.answerView.subviews makeObjectsPerformSelector:@selector( ...
- SWIFT 通过字符串创建相关的类
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- spring 怎样将枚举项注入到bean的数组字段中
在配置文件的xmlns中引入util的scheam xmlns:util=http://www.springframework.org/schema/util 在配置文件的xmlns:util=&qu ...
- XCODE中的蓝色文件夹与黄色文件夹
XCODE中的蓝色文件夹与黄色文件夹 黄色文件夹比较常见 - group , 在XCODE中以文件夹的形式存在,有层次感,但是实际文件在工程下是散乱的,没有层级结构.是XCODE中虚拟目录. 蓝色文件 ...
- 详细讲解Quartz.NET
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
- WAL
WAL record format typedef struct XLogRecord{pg_crc32 xl_crc; /* CRC for this record */XLogRe ...
- :“boost/serialization/string.hpp”: No such file or directory 错误
主要原因是没有安装和配置boost库. 解决:http://www.programlife.net/boost-compile-and-config.html