以下是一个简单的libaio示例程序,用于异步读取文件内容:
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <libaio.h>
#define BUF_SIZE 1024
int main() {
int fd, ret;
struct iocb read_req;
struct iocb* read_reqs[1];
struct io_event events[1];
char buffer[BUF_SIZE];
// 打开文件
fd = open("test.txt", O_RDONLY);
if (fd == -1) {
perror("Failed to open file");
exit(1);
}
// 初始化libaio上下文
io_context_t ctx;
ret = io_setup(128, &ctx); // 设置最大并发请求数为128
if (ret != 0) {
perror("Failed to setup libaio context");
exit(1);
}
// 准备读请求
memset(&read_req, 0, sizeof(read_req));
read_req.aio_fildes = fd;
read_req.aio_lio_opcode = IOCB_CMD_PREAD;
read_req.aio_buf = (__u64)buffer;
read_req.aio_nbytes = BUF_SIZE;
// 提交读请求到上下文中
read_reqs[0] = &read_req;
ret = io_submit(ctx, 1, read_reqs);
if (ret != 1) {
perror("Failed to submit aio request");
exit(1);
}
// 等待请求完成
ret = io_getevents(ctx, 1, 1, events, NULL);
if (ret != 1) {
perror("Failed to get aio events");
exit(1);
}
// 检查读请求是否成功
if (events[0].res != BUF_SIZE) {
fprintf(stderr, "Failed to read file\n");
exit(1);
}
// 打印文件内容
printf("Read content: %s\n", buffer);
// 清理资源
io_destroy(ctx);
close(fd);
return 0;
}
这个示例程序打开名为”test.txt”的文件,并异步读取其内容到缓冲区中。需要确保libaio库已经安装,编译时链接-laio参数。
请注意,实际使用libaio时,可能需要更多的错误处理和容错机制。这只是一个简单的示例来帮助你入门。
内容由零声教学AI助手提供,问题来源于学员提问