博客首页 注册 建议与交流 排行榜 加入友情链接
推荐 投诉 搜索: 帮助

ypxing

学而不思则罔,思而不学则殆

见贤思齐焉,见不贤而内自省也

人不知而不愠,不亦君子乎?

   ypxing.cublog.cn
关于作者  
姓名:星云鹏 (Yunpeng Xing)
职业:IT相关
年龄:28
位置:北京
个性介绍:
Love me, feed me, 
never leave me.
失败只有一种, 那就是半途而废

我的分类  




unp中的readn, writen和readline函数

#include <unistd.h>
#include <errno.h>

ssize_t readn(int fd, void *buf, size_t count)
{
  char *strtmp;
  ssize_t reval, realcount=0;
  strtmp = (char *)buf;
  
  while (count>0)
  {
    reval = read(fd, strtmp, count);
    if (reval<0)
      if (errno == EINTR)
        continue;
      else return -1;
    else if (reval>0)
    {
      count -= reval;
      strtmp += reval;
      realcount += reval;
      continue;
    }
    else break;
  }
  
  return realcount;
}

ssize_t writen(int fd, const void *buf, size_t count)
{
  char *strtmp;
  ssize_t reval, realcount=count;
  strtmp = (char *)buf;
  
  while(count>0)
  {
    reval = write(fd, strtmp, count);
    if (reval < 0)
      if (errno == EINTR)
        continue;
      else return -1;
      
    count -= reval;
    strtmp += reval;
  }
  
  return realcount;
}
ssize_t readline(int fd, void *buf, int size)
{
  char *strtmp;
  ssize_t reval, realcount=0;
  strtmp = (char *)buf;
 
  while(size>1)
  {
    reval = read(fd, strtmp, 1);
    if (reval<0)
      if (errno == EINTR)
        continue;
      else return -1;
    else if (reval == 0)
      break;
    else
    {
      realcount++;
      size--;
      if (*strtmp++ =='\n')
        break;
    }
  }
  *strtmp='\0';
  return realcount;
}

 发表于: 2007-10-05,修改于: 2007-10-05 21:02 已浏览498次,有评论0条 推荐 投诉

  网友评论

  发表评论



Copyright © 2001-2006 ChinaUnix.net All Rights Reserved

感谢所有关心和支持过ChinaUnix的朋友们
页面生成时间:0.01401

京ICP证041476号