linux aio拷贝文件,Linux通过AIO进行异步读文件

下面列出源代码:

#include

#include

#include

#include

#include

#include

#include

#include

static char *memBuffer;

static int sFileDesc;

static struct sigaction sOldSigAction;

static void MySigQuitHandler(int sig)

{

printf("Signal Quit! The number is: %d\n", sig);

}

static void MyFileReadCompleteProcedure(int sig, siginfo_t *si, void *ucontext)

{

printf("The file length is: %zu, and the content is: %s\n", strlen(memBuffer), memBuffer);

int status = close(sFileDesc);

if(status == )

puts("File closed successfully!");

else

printf("The error code is: %d\n", status);

free(memBuffer);

// 还原原来的SIGUSR1信号行为

if(sigaction(SIGUSR1, &sOldSigAction, NULL) == -)

puts("SIGUSR1 signal restore failed!");

}

int main(void)

{

struct sigaction sigAction = { .sa_flags = SA_RESTART, .sa_handler = &MySigQuitHandler };

sigemptyset(&sigAction.sa_mask);

if (sigaction(SIGQUIT, &sigAction, NULL) == -)

{

puts("Signal failed!");

return -;

}

sigAction.sa_sigaction = &MyFileReadCompleteProcedure;

if(sigaction(SIGUSR1, &sigAction, &sOldSigAction) == -)

{

puts("Signal failed!");

return -;

}

const char *filePath = "myfile.txt";

const mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;

sFileDesc = open(filePath, O_RDONLY, mode);

if(sFileDesc == -)

{

printf("The file: %s cannot be opened!\n", filePath);

return -;

}

const long fileLength = lseek(sFileDesc, , SEEK_END);

lseek(sFileDesc, , SEEK_SET);

memBuffer = malloc(fileLength + );

memBuffer[fileLength] = '\0';

struct aiocb aioBuffer;

aioBuffer.aio_fildes = sFileDesc;

aioBuffer.aio_offset = ;

aioBuffer.aio_buf = memBuffer;

aioBuffer.aio_nbytes = fileLength;

aioBuffer.aio_reqprio = ;

aioBuffer.aio_sigevent = (struct sigevent){.sigev_notify = SIGEV_SIGNAL, .sigev_signo = SIGUSR1, .sigev_value.sival_ptr = memBuffer };

aio_read(&aioBuffer);

getchar();

return ;

}

其中,上述代码实现中采用SIGUSR1信号进行捕获文件读完成事件,当然,这里也可以用SIGIO信号。

另外,在编译链接时必须添加-lrt命令选项,因为rt库才包含了系统底层的API。

node 使用koa2 异步读文件

目的:在一个文件夹(image)中有很多文件夹和文件,排除掉文件,将所有文件夹找出来 知识点: async 函数与 await  .只有在async函数内部,才能使用await,await等的必须是p ...

Linux Native Aio 异步AIO的研究

Linux Native Aio 异步AIO的研究 http://rango.swoole.com/archives/282 首先声明一下epoll+nonblock从宏观角度可以叫做全异步,但从微观 ...

Linux基础(10)AIO项目设计与POSIX文件操作和目录管理

实现fast-cp :拷贝文件到目标对象 Linux的七种文件类型 :https://blog.csdn.net/linkvivi/article/details/79834143 ls -al :h ...

蜕变成蝶~Linux设备驱动之异步通知和异步I/O

在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问.因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以被类似“中断”的异步通知所取代.异步通知类 ...

Linux C 一些函数 所属头文件

1. Linux中一些头文件的作用::ANSI C.提供断言,assert(表达式):GCC.GTK,GNOME的基础库,提供很多有用的函数 ...

Linux内核开发之异步通知与异步I/O(一)

“小王,听说过锦上添花吧..”我拍拍下王的头说. “还锦上添花你,为你上次提的几个东东,我是头上长包..”小王气愤地瞪着我. “啊,为啥这样呢,本来还特意拒绝了MM的月份,抽出时间打算给你说点高级的东 ...

Linux学习笔记(6)-文件I/O

持续一个礼拜的出差终于结束了,本次出差真是收益良多,不仅品尝了正宗的大闸蟹,同时也是第一次体验了产品的现场实施流程. 明天开始继续学习Linux! ----------------------分割线- ...

诠释Linux中『一切都是文件』概念和相应的文件类型

导读 在 Unix 和它衍生的比如 Linux 系统中,一切都可以看做文件.虽然它仅仅只是一个泛泛的概念,但这是事实.如果有不是文件的,那它一定是正运行的进程. 要理解这点,可以举个例子,您的根目录( ...

Python学习入门基础教程(learning Python)--5.2 Python读文件基础

上节简单的说明了一下Pyhon下的文件读写基本流程,从本节开始,我们做几个小例子来具体展示一下Python下的文件操作,本节主要是详细讲述Python的文件读操作. 下面举一个例子,例子的功能是读取当 ...

随机推荐

[LeetCode] Maximum Subarray 最大子数组

Find the contiguous subarray within an array (containing at least one number) which has the largest ...

Jenkins Slave 通过JNLP 的方式 访问Master IP 总是127.0.0.1

解决办法,重启机器 可能是我以前用的jenkins url 是127.0.0.1 然后是缓存什么没有释放掉所致

几个较好的SQL速查手册网址

微软 SQL server 数据库开发手册 数据库设计 Transact-SQL 速查手册 数据库设计 MySQL 中文参考手册速查 结构化查询语言 SQL 学习手册速查 转自:http://www. ...

解决open-vm-tools安装时Failed to get unit file state for run-vmblockx2dfuse.mount

不知道什么原因,在kali rolling安装open-vm-tools时报以下错误: Failed to get unit file state for run-vmblockx2dfuse.mou ...

SpringMVC(转)

http://www.cnblogs.com/liukemng/p/3725582.html

net+Oracle开发过程中遇到的小问题

最新的项目开始使用Oracle后,5个月之间遇到一些在SqlServer中没有遇到的问题,这里记录并贴上一些常用的解决办法. Oracle相关 一.数据库不同版本还原: 刚开始我们一直使用Oracle ...

ALGO-19 审美课

算法训练 审美课   时间限制:1.0s   内存限制:256.0MB      问题描述 课上有n位学生,帅老师展示了m幅画,其中有些是梵高的作品,另外的都出自五岁小朋 ...

scrapy简单使用

#settings.py文件设置 #如果网站中没有robots文件,就不会抓取任何数据 ROBOTSTXT_OBEY = False #设置请求头 DEFAULT_REQUEST_HEADERS = ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值