`
yuexiaodong
  • 浏览: 70302 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

linux AIO 读文件实例

阅读更多
AIO读操作,使用系统调用实现
#define BUFSIZE 1024
#include <stdio.h>
#include <stdlib.h>
#include <aio.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int main(void) {
	int fd, ret;
	struct aiocb my_aiocb;

	fd = open("file.txt", O_RDONLY);
	if (fd < 0)
		perror("open");

	/* Zero out the aiocb structure (recommended) */
	bzero((char *) &my_aiocb, sizeof(struct aiocb));

	/* Allocate a data buffer for the aiocb request */
	my_aiocb.aio_buf = malloc(BUFSIZE + 1);
	if (!my_aiocb.aio_buf)
		perror("malloc");

	/* Initialize the necessary fields in the aiocb */
	my_aiocb.aio_fildes = fd;
	my_aiocb.aio_nbytes = BUFSIZE;
	my_aiocb.aio_offset = 0;

	ret = aio_read(&my_aiocb);
	if (ret < 0)
		perror("aio_read");
	/**
	 aio_error return value :
	 EINPROGRESS,说明请求尚未完成
	 ECANCELLED,说明请求被应用程序取消了
	 -1,说明发生了错误,具体错误原因可以查阅 errno.h
	 */
	while (aio_error(&my_aiocb) == EINPROGRESS)
		;
	if ((ret = aio_return(&my_aiocb)) > 0) {
		/* got ret bytes on the read */
	      int n = my_aiocb.aio_nbytes; //length
               char *p0=(char *)my_aiocb.aio_buf; //返回字符
               printf("p0 is %s\n",p0);
		puts("!read success!!!");

		printf("buffersize is %d,real byte size is %d", n, ret);	

	} else {
		/* read failed, consult errno */
		puts("!!!read fail!!");
	}
	return 0;
}

 

 

这样建立一个测试文件,就可以异步读取了,使用gcc编译的时候注意链接动态库librt编译命令如下:

gcc -o myaio  myaio.c /lib/librt.so.1

librt.so.1为我的rt动态链接库,在/lib目录下

分享到:
评论

相关推荐

    linux_aio.zip_LINUX下开启AIO_aio glibc_aio 两种方式_linux aio_linux_aio

    在Linux操作系统中,异步I/O(Asynchronous Input/Output,简称AIO)是一种提高程序效率的方法,它允许程序在不等待I/O操作完成的情况下继续执行其他任务。本压缩包"linux_aio.zip"包含了关于如何在Linux下开启AIO...

    aio.zip_aio_asynchronous io_linux aio

    "aio.zip_aio_asynchronous_io_linux_aio"这个压缩包文件可能包含了一系列用于测试和理解Linux AIO机制的示例代码或工具。 Linux AIO并非内核原生支持的特性,而是通过libaio库来实现的。libaio提供了一组API,让...

    linux文件操作的源码总结与示例

    本文将深入探讨Linux文件操作的源码,提供相关的示例,帮助开发者理解并熟练掌握这一领域的知识。 1. **文件描述符(File Descriptors)** 文件描述符是Linux内核用于识别打开文件的一个非负整数。每个进程都有三个...

    Linux-kernel-file-IO.rar_Linux IO_linux 文件读写_linux读写文件_文件io_简单内核

    6. **异步I/O**:在Linux中,可以使用AIO(Asynchronous Input/Output)库进行异步文件I/O操作。这种方式允许应用程序在等待I/O完成的同时执行其他任务,提高了系统的并发性。 7. **内存映射(Memory Mapping)**:...

    Linux文件IO操作例程

    在Linux操作系统中,文件I/O(输入/输出)操作是程序与系统进行数据交换的核心环节。本主题将深入探讨Linux文件IO操作例程,帮助你理解如何在C语言环境中使用这些函数来读写文件,创建、打开、关闭以及管理文件。 1...

    Linux下C实现的TCP文件传输源码.zip

    本压缩包中的"Linux下C实现的TCP文件传输源码"提供了实现TCP/IP协议的文件传输功能的源代码示例。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据的...

    Linux文件IO编程代码

    总之,"Linux文件IO编程.zip"可能包含了一系列关于如何在Linux环境下进行高效、可靠的文件操作的教程和示例代码。通过学习,开发者可以更好地理解和运用Linux文件系统的强大功能,提升软件开发的能力。

    AIO.rar_aio

    根据提供的压缩包文件名称"AIO",我们可以推测这个资源可能包含了AIO库的源代码、编译好的库文件、示例代码、文档甚至可能有测试用例。为了深入了解和使用这个库,我们需要解压文件并按照文档的指导进行操作。如果...

    linux_code.rar_linux 高级编程_linux文件编程_linux网络编程IO_linux高级

    文件操作API提供了丰富的函数,如`open()`, `read()`, `write()`, `close()`等,用于打开、读取、写入和关闭文件。此外,还有高级I/O函数如`pread()`, `pwrite()`用于指定偏移量的读写,以及异步I/O (`aio`) 和内存...

    Linux系统程序设计_文件操作例程

    本示例的工程文件“IoFileOperation”显然聚焦于Linux下的文件I/O(输入/输出)操作。下面我们将详细探讨相关的知识点。 1. **文件描述符(File Descriptors)**:在Linux中,每个打开的文件都由一个非负整数表示,...

    Linux系统程序设计_文件IO例程

    通过阅读和实践博客中的代码示例,可以更深入地理解Linux系统程序设计中的文件I/O操作,这对于从事Linux运维、服务器开发和学习Linux系统编程的人员来说是非常有价值的。同时,熟悉这些操作也有助于优化程序性能,...

    aio.rar_V2

    标题中的"aio.rar_V2"表明这是一个与异步输入/输出(Asynchronous I/O, 简称AIO)相关的文件集合,版本为V2。描述提到"init sync kiocb for Linux v2.13.6",这涉及到Linux内核的一个特定版本中的同步I/O控制块...

    嵌入式Linux下C程序设计09文件操作共20页.pdf

    6. **文件权限与权限设置**:Linux系统使用rwx(读、写、执行)权限位对文件进行控制。`chmod()`函数可以用来修改文件的权限。 7. **文件状态和元信息**:`fstat()`函数获取关于文件的状态信息,包括大小、权限、...

    linux内核图解-linux内核图解

    在Linux中,进程是程序的执行实例。内核通过调度器进行进程的调度,根据不同的策略分配CPU时间。Linux还支持线程,线程是轻量级的进程,共享同一地址空间,提高了并发性能。 3. 内存管理 Linux内核采用虚拟内存技术...

    VFS and filesystems in Linux

    - **抽象结构**:VFS定义了一系列抽象的数据结构,如inode、dentry、file、super_block和file_system_type等,用于表示文件、目录条目、打开的文件实例、文件系统实例和文件系统类型等概念。 - **缓存机制**:为了...

    系统调用之 I/O 操作(文件操作)示例代码

    除了这些基本操作,还有一些高级的I/O系统调用,如`lseek()`用于改变文件指针的位置,`fcntl()`用于设置或获取文件描述符的状态,以及异步I/O操作的`aio_`系列函数等。 在实际编程中,我们通常会结合标准I/O库(如...

    【嵌入式软件工程师面经】Linux文件IO.pdf

    ### 嵌入式软件工程师面经:深入理解Linux下的文件与设备IO #### 一、文件IO(File I/O) 文件输入/输出(File I/O)是操作系统中最基础且重要的功能之一,它处理的是文件系统层面的数据读写操作。下面详细介绍文件...

    嵌入Linux网络编程实例源代码

    6. **异步编程**:Linux提供了异步I/O模型AIO(Asynchronous Input/Output),允许在完成I/O操作之前继续执行其他任务,提高程序效率。 7. **网络安全**:在编写网络程序时,还需要考虑安全性,如避免缓冲区溢出、...

    Linux_C_io.rar_linux omap

    在Linux中,我们可以使用标准I/O库函数打开、读取和写入这样的文本文件。例如,`fopen()`用于打开文件,`fread()`和`fwrite()`用于读写数据,`fclose()`则用于关闭文件。 而"Linux_C_io"很可能是一个包含多个C源码...

    [14本经典Android开发教程]-8-Linux内核阅读心得体会

    [14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 ...读核感悟 文件读写 内核态是否支持非direct I O方式的AIO ...

Global site tag (gtag.js) - Google Analytics