概述
对于网络读写操作,经常会因为信号中断而异常返回,这时候系统的read和write函数明显捉急了。
下面先讲解一下封装异常处理的read函数,write函数类似。
先看my_read函数的执行流程:
下面直接上代码,注释里面说得很清楚,这里就不啰嗦了
#include <errno.h>
#include <fcntl.h>
#include <unistd.h>
/*封装read函数,增加异常处理,参数和返回值跟read函数相同*/
ssize_t my_read(int fd, void *buffer, size_t length)
{
ssize_t len = length;//读入的字节数
while(len > 0)//如果因为信号中断而导致异常,则多次读取
{
len = read(fd, buffer, length);
if (len != length)//异常出错
{
if (errno == EINER)//如果是信号中断导致的错误,则舍弃已读入的内容,重新读取
{
len = length;
}
else//其他错误则输出错误原因,并且返回
{
perror("failed to read");
return -1;
}
}
else
break;
}
return len;//返回实际读入的字节数
}
my_write函数执行流程类似,要想画图自己画一个吧,我就只上代码了。
/*封装write函数,增加异常处理,参数和返回值跟write函数相同*/
ssize_t my_write(int fd, void *buffer, size_t length)
{
ssize_t len = length;//实际写的字节数
while(len > 0)//如果因为信号中断而导致异常,则多次写缓冲区
{
len = write(fd, buffer, length);
if (len != length)//异常出错
{
if (errno == EINER)//如果是信号中断导致的错误,则舍弃已写的内容,重新写缓冲区
{
len = length;
}
else//其他错误则输出错误原因,并且返回
{
perror("failed to write");
return -1;
}
}
else
break;
}
return len;//返回实际写的字节数
}
最后
以上就是还单身魔镜为你收集整理的封装异常处理的read和write函数的全部内容,希望文章能够帮你解决封装异常处理的read和write函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复