我是靠谱客的博主 还单身魔镜,最近开发中收集的这篇文章主要介绍封装异常处理的read和write函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

对于网络读写操作,经常会因为信号中断而异常返回,这时候系统的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函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部