一、read用法
例:代码如下:
第一步在程序当前目录新建
—————————————————
#include < stdio.h>
#include < fcntl.h> //open头文件
#include < unistd.h> //read头文件
#include < sys/types.h> //read头文件
#include < sys/uio.h> //read头文件
int main(){
int fd;
char *buf;
fd =open(“a.txt”,’r’);
if(fd <=0)
printf("open file error!");
if((read(fd,buf,1000)) <0)
{
printf("read file error!");
}else{
printf("read information:%s\n",buf);
}
close(fd);
}
--------------------------------------------------------
运行效果:
二、read扩展 健壮地读--无缓冲
无缓冲健壮地读的原理:首先将待读入文件的长度放入一个临时变量中,循环的读取文件,当临时变量的值等于0时,代表读完毕。
故无缓冲健壮地读是通过一个 while循环和一个临时变量来保证文件被读取完毕!
例: 我们采用无缓冲健壮地读
———————————————————
#include < stdio.h>
#include < fcntl.h>
#include < unistd.h>
#include < sys/types.h>
#include < sys/uio.h>
ssize_t readExtend(int fd,void *usrbuf,size_t n);
int main(){
int fd;
char *buf;
fd =open(“a.txt”,’r’);
if(fd <=0)
printf("open file error!");
if((readExtend(fd,buf,1000)) <0)
{
printf("read file error!");
}else{
printf("read information:%s\n",buf);
}
close(fd);
}
ssize_t readExtend(int fd,void *usrbuf,size_t n){
size_t tmp = n; //临时变量 存储待读取长度
ssize_t nread; //返回值
char *tmpBuf = usrbuf;
while(tmp >0){
if((nread=read(fd,tmpBuf,tmp)) <0){
return -1;
}else if(nread ==0)
break;
tmp -=nread;
tmpBuf +=nread;
}
return (n-tmp);
}
----------------------------------------------------------
二、read扩展 健壮地读--有缓冲
有缓冲读的原理就是,将数据缓冲至usrbuf中,当我们调取read时候,会检测缓冲值中是否存在,如果存在,则不进行读取,如果缓存的长度小于所需的长度,则重新调取read读取。