linux c read函数扩展


一、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基本用法


二、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读取。