void foef(FILE *stream);
void ferror(FILE *stream);
文件定位:
fseek();ftell();rewind();
int fseek(FILE *stream,long of offset,int whence);
//偏移文件位置
offset:文件偏移字节数。
整数:正数向后(向末尾)偏移,负数向前(向开头)偏移
whence:偏移起始位置
SEEK_SET:从文件开头偏移
SEEK_CUR:从当前位置偏移
SEEK_END:最后一个字符的下一个位置偏移
成功返回当前位置;失败返回-1。
long ftell(FILE *stream);
//计算当前位置到文件开头的字节数
成功返回当前位置;失败返回-1。
void rewind(FILE *stream);
//定位到文件开头位置
缓冲区:
行缓冲、全缓冲、无缓冲
行缓冲:大小1K byte,主要用于命令行人机交互(printf、puts)
刷新条件:1.遇到 '\n' --printf加'\n',否则在缓冲区不打印
2.缓冲区满;
3.程序正常结束;
4.fflush刷新; --fflush(FILE *stream)
全缓冲:大小4K byte,主要用于文件读写(fputs、fputc)
刷新条件:1.缓冲区满;
2.程序正常结束;
3.fflush刷新; --fflush(FILE *stream)
无缓冲:大小0 byte,主要用于出错信息的输出
不刷新直接输出
标准FILE流
stdin:标准输入(scanf)
stdout:标准输出(printf)
stderr:标准错误,无缓冲,直接输出
printf("fail\n"); ==> fprintf(stderr,"fail");
fgetc(fp); ==> fgetc(stdin); (文件获取 >> 键盘获取)
fputc('char',fp); ==> fputc('char',stdout); (文件输出 >> 屏幕输出)
文件IO
特点:
1.没有缓冲机制
2.操作对象,不是文件流,是文件描述符fd(0-1203)
程序启动时自动打开三个文件:
0:stdin
1:stdout
2:stderr
新打开文件,文件描述符从3开始
操作函数:
open,read,write,close
int open(const char *pathname,int flag,mode_t mode);
pathname:文件路径
flag:标志位,包含访问权限,多个权限按位或:
O_RDONLY:只读
O_WRONLY:只写
O_RDWR:可读可写
O_APPEND:在文件最后追加
O_CREAT:新建文件(新建文件时,添加新参数mode_t mode)
O_TRUNC:清空文件
mode:
--- rwx 0666
操作成功返回文件描述符fd,操作失败返回-1
int write(int fd,const void *buf,size_t count);
fd:文件描述符
buf:写入内容地址
count:写入内容长度
操作成功返回写入长度,操作失败返回-1
size_t read(int fd,void *buf,size_t count);
fd:文件描述符
buf:写入的空间地址
count:要读取的长度
操作失败返回 -1,操作成功返回读取长度,到达文件结尾返回0
通常通过获取read返回值来确定write写入的长度,防止多写和少写。
尽量避免使用sizeof(buf)和strlen(buf)
int close(int fd);
成功返回0;失败返回-1
20240813嵌入式学习笔记
最新推荐文章于 2024-08-17 09:18:30 发布