[Linux Device Driver] 标准IO

本文详细讲解了C语言中文件操作的基石,如fopen/fclose、fgets/fputs等,介绍了不同类型的流(文本与二进制)及其缓存机制,重点讲解了setbuf/setvbuf、fflush和流控制函数。涵盖了如何通过FILE指针管理文件,以及如何正确处理文件操作的边界条件和缓存刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文件类型 bcd_lsp

文件的常见操作:
fopen/fclose
fgets/fputs
fgetc/fputc
fwrite/fread

FILE指针:每个使用的文件都在内存中开辟一段区域,用来存放文件的有关信息,这些信息背包寻到一个结构体中,该结构体的类型由系统定义,取名FILE。

标注Io操作对象是stream,在标准IO中,流由FILE*描述

流又分为文本流(以ascii存放)和二进制流(以二进制存放)

标准i偶的缓存方式分为全缓存,行缓存,不带缓存。

使用函数setbuf() setvbuf()可以更改缓存类型 -IONBF(不缓存) IOLBF(行缓存) FOFBF(全缓存)
不缓存:不阻塞
行缓存:出现\n时,将缓冲区的数据输出
全缓存:只有当数据填充满缓冲区或者退出程序或关闭文件后才会输出。

fflush()函数 强制刷新缓冲区(使用fclose()函数就,即关闭文件后,可强制刷新缓冲区)

1、打开流

FIFE *fopen(const char *path,const char *mode)
FIFE *freopen(const char *path,const char *mode,FIFE *stream) //关闭一个已打开的流,重新新打开一个文件
FIFE *fdopen(int filedes,con char *type)

example : fopen("/home/linux/test/1.c",“w”);

fopen的返回值是打开的文件指针。

2、关闭流

int fclose(FILE *stream);
返回值:成功0,失败EOF,并设置errno

3、读写流

int fgetc(FILE *stream); 返回值:成功返回读取到的字符,失败返回EOF
int fputc(int i,FILE *stream); 返回值:返回写入成功的字符,失败返回EOF

char *fgets(char *s,int size,FILE stream)
作用:从流中读取一个字符,一直遇到"\n"或者读了size-1个字符为止,存储到字符指针s所指的内存区域
返回值:返回
s的地址
char *fputs(const char *s,FILE *stream) 将指针所指向的区域的数据读取到流上

size_t fread(void *ptr,size_t size,size_t nnum,FILE *stream)
size_t fwrite(void *ptr,size_t size,size_t nnum,FILE *stream)

4、操作流

int fseek(FILE *stream,long offset,int where)
long ftell(FIFE *stream) //返回当前的读写位置
void rewind() //将当前的读写位置移到开头

fsetops(FIFE *stream,long *ops) //将读写位置定位到pos位置
fgetops(FIFE *stream,long *ops) //返回当前的读写位置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值