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操作系统中,异步I/O(Asynchronous Input/Output,简称AIO)是一种提高程序效率的方法,它允许程序在不等待I/O操作完成的情况下继续执行其他任务。本压缩包"linux_aio.zip"包含了关于如何在Linux下开启AIO...
"aio.zip_aio_asynchronous_io_linux_aio"这个压缩包文件可能包含了一系列用于测试和理解Linux AIO机制的示例代码或工具。 Linux AIO并非内核原生支持的特性,而是通过libaio库来实现的。libaio提供了一组API,让...
本文将深入探讨Linux文件操作的源码,提供相关的示例,帮助开发者理解并熟练掌握这一领域的知识。 1. **文件描述符(File Descriptors)** 文件描述符是Linux内核用于识别打开文件的一个非负整数。每个进程都有三个...
6. **异步I/O**:在Linux中,可以使用AIO(Asynchronous Input/Output)库进行异步文件I/O操作。这种方式允许应用程序在等待I/O完成的同时执行其他任务,提高了系统的并发性。 7. **内存映射(Memory Mapping)**:...
在Linux操作系统中,文件I/O(输入/输出)操作是程序与系统进行数据交换的核心环节。本主题将深入探讨Linux文件IO操作例程,帮助你理解如何在C语言环境中使用这些函数来读写文件,创建、打开、关闭以及管理文件。 1...
本压缩包中的"Linux下C实现的TCP文件传输源码"提供了实现TCP/IP协议的文件传输功能的源代码示例。TCP(Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,常用于保证数据的...
总之,"Linux文件IO编程.zip"可能包含了一系列关于如何在Linux环境下进行高效、可靠的文件操作的教程和示例代码。通过学习,开发者可以更好地理解和运用Linux文件系统的强大功能,提升软件开发的能力。
根据提供的压缩包文件名称"AIO",我们可以推测这个资源可能包含了AIO库的源代码、编译好的库文件、示例代码、文档甚至可能有测试用例。为了深入了解和使用这个库,我们需要解压文件并按照文档的指导进行操作。如果...
文件操作API提供了丰富的函数,如`open()`, `read()`, `write()`, `close()`等,用于打开、读取、写入和关闭文件。此外,还有高级I/O函数如`pread()`, `pwrite()`用于指定偏移量的读写,以及异步I/O (`aio`) 和内存...
本示例的工程文件“IoFileOperation”显然聚焦于Linux下的文件I/O(输入/输出)操作。下面我们将详细探讨相关的知识点。 1. **文件描述符(File Descriptors)**:在Linux中,每个打开的文件都由一个非负整数表示,...
通过阅读和实践博客中的代码示例,可以更深入地理解Linux系统程序设计中的文件I/O操作,这对于从事Linux运维、服务器开发和学习Linux系统编程的人员来说是非常有价值的。同时,熟悉这些操作也有助于优化程序性能,...
标题中的"aio.rar_V2"表明这是一个与异步输入/输出(Asynchronous I/O, 简称AIO)相关的文件集合,版本为V2。描述提到"init sync kiocb for Linux v2.13.6",这涉及到Linux内核的一个特定版本中的同步I/O控制块...
6. **文件权限与权限设置**:Linux系统使用rwx(读、写、执行)权限位对文件进行控制。`chmod()`函数可以用来修改文件的权限。 7. **文件状态和元信息**:`fstat()`函数获取关于文件的状态信息,包括大小、权限、...
在Linux中,进程是程序的执行实例。内核通过调度器进行进程的调度,根据不同的策略分配CPU时间。Linux还支持线程,线程是轻量级的进程,共享同一地址空间,提高了并发性能。 3. 内存管理 Linux内核采用虚拟内存技术...
- **抽象结构**:VFS定义了一系列抽象的数据结构,如inode、dentry、file、super_block和file_system_type等,用于表示文件、目录条目、打开的文件实例、文件系统实例和文件系统类型等概念。 - **缓存机制**:为了...
除了这些基本操作,还有一些高级的I/O系统调用,如`lseek()`用于改变文件指针的位置,`fcntl()`用于设置或获取文件描述符的状态,以及异步I/O操作的`aio_`系列函数等。 在实际编程中,我们通常会结合标准I/O库(如...
### 嵌入式软件工程师面经:深入理解Linux下的文件与设备IO #### 一、文件IO(File I/O) 文件输入/输出(File I/O)是操作系统中最基础且重要的功能之一,它处理的是文件系统层面的数据读写操作。下面详细介绍文件...
6. **异步编程**:Linux提供了异步I/O模型AIO(Asynchronous Input/Output),允许在完成I/O操作之前继续执行其他任务,提高程序效率。 7. **网络安全**:在编写网络程序时,还需要考虑安全性,如避免缓冲区溢出、...
在Linux中,我们可以使用标准I/O库函数打开、读取和写入这样的文本文件。例如,`fopen()`用于打开文件,`fread()`和`fwrite()`用于读写数据,`fclose()`则用于关闭文件。 而"Linux_C_io"很可能是一个包含多个C源码...
[14本经典Android开发教程] 8 Linux内核阅读心得体会 读核感悟 2 读核感悟 Linux内核启动 内核的生成 2 读核感悟 Linux内核启动 从hello world说起 3 ...读核感悟 文件读写 内核态是否支持非direct I O方式的AIO ...