博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
readn和writen函数一览------顺便说说recv函数的MSG_WAITALL参数
阅读量:4142 次
发布时间:2019-05-25

本文共 893 字,大约阅读时间需要 2 分钟。

        我博客中很少只给出某些代码的片段, 基本都是能够直接运行的完整代码, 本文我们只给片段(很简单), 下面来看看:

ssize_t readn(int fd, void *buf, int n){	size_t nleft = n;   // left的意思是“剩下”, 而非“左边”	char *bufptr = buf;	ssize_t nread;	while(nleft > 0)	{		if((nread = read(fd, bufptr, n)) < 0)		{			if(errno == EINTR) 	// 遇到中断			{ 				continue;   // 或者用 nread = 0;			}			else			{				return -1;  // 真正错误			}		}		else if(nread == 0) // 对端关闭		{			break;		}		nleft -= nread;		bufptr += nread;	}	return (n - nleft);}
        说白了, 就一直读, 读到指定的字节数为止。 其实, 在recv函数中, 最后参数如果是MSG_WAITALL,  那么就可以用recv函数一行代码, 替代上述所有代码, 棒棒哒。 一直读取到n个字节, 在实际中, 是经常用到的方法, 太常见了。

        再看:

ssize_t writen(int fd, void *buf, int n){	size_t nleft = n;	char *bufptr = buf;	ssize_t nwrite;	while(nleft > 0)	{		if((nwrite = write(fd, bufptr, n)) <= 0)		{			if(errno == EINTR)			{				nwrite = 0;			}			else			{				return -1;			}		}		nleft -= nwrite;		bufptr += nwrite;	}	return n;}
       说白了, 就一直写, 写到指定的字节数为止。

        不多说。

       

转载地址:http://xnwti.baihongyu.com/

你可能感兴趣的文章
python+opencv之视频人脸识别
查看>>
人脸识别(OpenCV+Python)
查看>>
6个强大的AngularJS扩展应用
查看>>
网站用户登录系统设计——jsGen实现版
查看>>
第三方SDK:讯飞语音听写
查看>>
第三方SDK:JPush SDK Eclipse
查看>>
第三方开源库:imageLoader的使用
查看>>
自定义控件:飞入飞出的效果
查看>>
自定义控件:动态获取控件的高
查看>>
第三方开源库:nineoldandroid:ValueAnimator 动态设置textview的高
查看>>
第三方SDK:百度地图SDK的使用
查看>>
Android studio_迁移Eclipse项目到Android studio
查看>>
JavaScript setTimeout() clearTimeout() 方法
查看>>
CSS border 属性及用border画各种图形
查看>>
转载知乎-前端汇总资源
查看>>
JavaScript substr() 方法
查看>>
JavaScript slice() 方法
查看>>
JavaScript substring() 方法
查看>>
HTML 5 新的表单元素 datalist keygen output
查看>>
(转载)正确理解cookie和session机制原理
查看>>