Chinaunix首页 | 论坛 | 博客
  • 博客访问: 31090
  • 博文数量: 11
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 131
  • 用 户 组: 普通用户
  • 注册时间: 2015-04-14 19:23
个人简介

a person

文章分类

全部博文(11)

文章存档

2015年(11)

我的朋友

分类: C/C++

2015-04-27 11:56:45

Pipes, FIFOs和其他的一些网络设备和终端有以下两个特性:
1. read操作返回的值可能少于指定的读取字节
2. write操作返回的值可能少于指定的写字节
这两个特性不属于错误,详细参看apue

这里提供两个通用的方法,读取和写入n个字节

点击(此处)折叠或打开

  1. #include <unistd.h>
  2. #include <sys/types.h>
  3. /* Read 'n' bytes from a descriptor */
  4. ssize_t readn(int fd,void *ptr,size_t n){
  5.         size_t nleft;
  6.         ssize_t nread;

  7.         nleft=n;
  8.         while(nleft>0){
  9.                 if((nread=read(fd,ptr,nleft))<0){
  10.                         if(nleft==n)
  11.                                 return(-1); /* error, return -1 */
  12.                         else
  13.                                 break; /* error, return amount read so far */
  14.                                 break; /* error, return amount read so far */
  15.                 }else if(nread==0){
  16.                         break; /* EOF */
  17.                 }
  18.                 nleft -= nread;
  19.                 ptr += nread;
  20.         }
  21.         return(n-nleft); /* return >=0 */
  22. }

  23. /* Write 'n' bytes to a descriptor */
  24. ssize_t writen(int fd,const void *ptr,size_t n){
  25.         size_t nleft;
  26.         ssize_t nwritten;

  27.         nleft=n;
  28.         while(nleft>0){
  29.                 if((nwritten=write(fd,ptr,nleft))<0){
  30.                         if(nleft==n)
  31.                                 return(-1); /* error return -1 */
  32.                         else
  33.                                 break; /* error, return amount written so far */
  34.                 }else if(nwritten==0){
  35.                         break;
  36.                 }
  37.                 nleft-=nwritten;
  38.                 ptr+=nwritten;
  39.         }
  40.         return(n-nleft); /* return >=0 */
  41. }

阅读(896) | 评论(0) | 转发(0) |
0

上一篇:创建Daemon进程

下一篇:指数退避算法

给主人留下些什么吧!~~