linux. read函数,linux c read函数扩展

本文介绍了C语言中read函数的基本用法,并探讨了如何通过无缓冲和有缓冲的方式实现健壮的文件读取。在无缓冲读取中,通过while循环和临时变量确保文件完整读取;而在有缓冲读取中,数据会被先存储到缓冲区,根据缓冲情况决定是否再次调用read。这两个方法提高了文件读取的可靠性和效率。
摘要由CSDN通过智能技术生成

一、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);

}

--------------------------------------------------------

运行效果:

e0c8be2b31aed9eed581466d7f2344d4.png

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值