> 作者:დ旧言~
> 座右铭:松树千年终是朽,槿花一日自为荣。> 目标:了解在Linux下的系统文件IO,知道什么是文件描述符,什么是重定向
> 毒鸡汤:白日莫闲过,青春不再来。
> 专栏选自:Linux初阶
> 望小伙伴们点赞👍收藏✨加关注哟💕💕
🌟前言
最早我们在C语言中学习关于如何用代码来管理文件,比如文件的输入和文件的输出,一些文件的接口,掌握上述的知识只能说是对文件入门而已,在Linux中我们是一切接文件的,如何深入学习文件的知识这是一个难题,今天我们所探讨就是Linux的基础I/O。
⭐主体
学习【Linux】基础IO咱们按照下面的图解:
🌙 回顾C文件接口
💫 C 读写文件
文件操作:
- 首先要打开文件:打开成功,返回文件指针;打开失败,返回NULL
- 最后要关闭文件
代码操作:
FILE *fopen(const char *path, const char *mode);
int fclose(FILE *fp);
1.C 写文件
采用方法:
我们可以fputs/fgets以字符串形式读写;也可以fprintf/fscanf格式化读写
代码操作:
int fputs(const char *s, FILE *stream); 向特定文件流写入字符串
int fprintf(FILE *stream, const char *format, ...);
举个栗子:
①如果以"w"模式打开文件,默认是文本读写,且会把原始内容清掉再写。
代码如下:
#include <stdio.h> int main() { FILE *fp = fopen("log.txt","w"); if(fp == NULL) { perror("fopen"); return 1; } // 进行文件操作 fclose(fp); return 0; }
运行结果:
②如果要以追加方式写,则要以"a
" append模式打开文件
代码如下:
#include <stdio.h> #include <unistd.h> #include <string.h> int main() { FILE *fp = fopen("log.txt","a"); // 追加 if(fp == NULL) { perror("fopen"); return 1; } // 进行文件操作 const char* s = "hello world\n"; fwrite(s,strlen(s),1,fp); return 0; }
运行结果:
2.C 读文件
解读:
fgets从特定文件流中按行读取,内容放在缓冲区。读取成功返回字符串起始地址,读失败返回NULL.
代码演示:
char *fgets(char *s, int size, FILE *stream); //size:为缓冲区大小
int fscanf(FILE *stream, const char *format, ...);
举个栗子:
#include <stdio.h> #include <unistd.h> #include <string.h> int main() { FILE *fp = fopen("./log.txt","r"); if(fp == NULL) { perror("fopen"); return 1; } // 进行文件操作 char buffer[64]; while(fgets(buffer,sizeof(buffer),fp)) { printf("%s",buffer);//把我们读到的东西打出来 } return 0; }
运行结果:
💫 关于stdin stdout stderr
概念分析:
C语言默认会打开三个输入输出流:stdin、stdout、stderr,它们的类型都是FILE*,C语言把它们当做文件