fopen linux 路径_Linux标准I/O编程

论坛 期权论坛 编程之家     
选择匿名的用户   2021-6-2 20:29   1933   0

点击蓝字 关注我们

1dd71758cc84b3eca04264660b298878.png 541615571911e829a23889145939c0f6.gif

dc3cb1ec08b51dfd1213ec6dec2aac87.png

标准IO编程

1.流的打开

函数原型:FILE *fopen(const char *path,const char *mode)
函数参数:path 要打开的文件路径及文件名
mode 文件打开方式
返 回 值:成功---指向FILE指针;失败---NULL
mode值取值说明
r打开只读文件,该文件必须存在
r+打开可读写文件,该文件必须存在
w打开只写文件,若文件存在擦除内容;若不存在建立文件
w+打开可读写文件,若文件存在擦除内容;若不存在建立文件
a打开只写文件,若文件存在写入的数据会被加到文件尾;若不存在建立文件
a+打开可读写文件,若文件存在写入的数据会被加到文件尾;若不存在建立文件
当用户程序运行时,系统自动打开3个流: stdin、stdout、stderr

2.流的关闭

函数原型:int *fclose(FILE *stream)
函数参数:stream 已打开的流指针
返 回 值:成功---0;失败---EOF

程序结束时会自动关闭所有打开的流

3.错误处理

3.1 perror()函数
函数原型:void *perror(const char * s)
函数参数:s 在标准错误流上输出的信息
返 回 值:无

示例代码:

 1#include 
2
3int main() 4{
5 FILE *fp;
6 if((fp = fopen("test.txt","r")) == NULL){
7 perror("fail to fopen");
8 return -1;
9 }
10 fclose(fp);
11 return 0;
12}

如果文件不存在,程序执行时会打印信息: No such file or diectory

3.2 strerror()函数
函数原型:char *strerror(int errnum)
函数参数:errnum 错误码
函数返回值:错误码对应的错误信息

示例代码:

 1#include 
2
3int main() 4{
5 FILE *fp;
6 if((fp = fopen("test.txt","r")) == NULL){
7 printf("fail to fopen: %s\n", strerror(errno));
8 return -1;
9 }
10 fclose(fp);
11 return 0;
12}

如果文件不存在,程序执行时会打印信息: No such file or diectory

4.流的读写

4.1 按字符(字节)输入/输出
函数原型:int getc(FILE *stream) int fgetc(FILE *stream) int getchar(void) //从stdin中读取一个字符
函数参数:stream 要输入的文件流
返 回 值:成功---读取的字符;失败---EOF
函数原型:int putc(int c, FILE *stream) //向指定的流输出一个字符int fputc(int c, FILE *stream) int putchar(int c) //从stdout输出一个字符
函数参数:c 输出的字符
stream 指定的文件流
返 回 值:成功---输出的字符;失败---EOF
4.2 按行输入/输出
函数原型:char * gets(char *s) //容易造成缓冲区溢出,不建议使用char * fgets(char *s, int size, FILE *stream) //从指定的流中读取一个字符串,当遇到\n时,会读取\n或读取size-1个字符后返回
函数参数:s 存放输入字符串的缓冲区首地址
size 输入的字符串长度
stream 对应的流
返 回 值:成功---s;失败---NULL
函数原型:int puts(const char *s) int fputs(const char *s, FILE *stream)
函数参数:s 存放输出字符串的缓冲区首地址
stream 对应的流
返 回 值:成功---s;失败---NULL
4.3 以指定大小为单位读写文件
在文件流被打开之后,对文件流按指定大小为单位进行读写操作
函数原型:size_t fread(void *ptr, size_t size, size_t nmemb, FILE * stream)
函数参数:ptr 存放读入记录的缓冲区
size 读取的每个记录的大小
nmemb 读取的记录数
stream 要读取的文件流
返 回 值:成功---返回实际读到的nmemb数目;失败---EOF

函数原型:size_t fwrite(void *ptr, size_t size, size_t nmemb, FILE * stream)
函数参数:ptr 存放写入记录的缓冲区
size 写入的每个记录的大小
nmemb 写入的记录数
stream 要写入的文件流
返 回 值:成功---返回实际写入的nmemb数目;失败---EOF

5.流的定位

每个打开的流内部都有一个当前读写位置。流在打开时,当前读写位置为0,表示文件的开始位置。每读写一次后,当前读写位置自动增加实际读写的大小。在读写流之前可先对流进行定位,即移动到指定的位置再操作

函数原型:int fseek(FILE * stream, long offset, int whence)
函数参数:stream 要定位的文件流
offset 相对于基准值的偏移量
whence 基准值
-->SEEK_SET 代表文件起始位置
-->SEEK_END 代表文件结束位置
-->SEEK_CUR 代表文件当前读写位置
返 回 值:成功---0;失败---EOF
函数原型:long ftell(FILE * stream)
函数参数:stream 要定位的文件流
返 回 值:成功---返回当前读写位置;失败---EOF

6.格式化输入/输出

格式化输入输出函数可以指定输入输出的具体格式

函数原型:int scanf(const char *format, ...)int fscanf(FILE *fp, const char *format, ...)int sscanf(char *buf, const char *format, ...)
函数参数:format 输入的格式
fp 作为输入的流
buf 作为输入的缓冲区
返 回 值:成功---输出字符数;失败---EOF
函数原型:int printf(const char *format, ...)int fprintf(FILE *fp, const char *format, ...)int sprintf(char *buf, const char *format, ...)
函数参数:format 输出的格式
fp 接收输出的流
buf 接收输出的缓冲区
返 回 值:成功---输出字符数;失败---EOF
541615571911e829a23889145939c0f6.gif

嵌入式攻城狮

63379cbbefdae80e99d96342074717cb.png

微信号 : andyxi_linux

专注于嵌入式开发技术

扫码关注我们

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP