#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;
}
readn, writen和readline函数
最新推荐文章于 2021-05-13 15:12:06 发布
本文介绍了一种在C语言中通过循环处理避免阻塞读写操作的方法,实现高效读取和写入文件。通过使用readn和writen函数,可以有效地管理文件I/O操作,尤其在处理大量数据时,避免了由于等待系统调用完成而导致的程序阻塞。
599

被折叠的 条评论
为什么被折叠?



