文件:
1.必要性:
保存数据(存放在外存掉电不丢失数据、便宜、访问速度慢、存储量大)
linux下一切皆文件:鼠标、键盘,显示器……硬件设备 (第一个字母为文件类型)
2.Linux文件类型:
b block 块设备文件 存储设备
c character 字符设备文件 输入输出设备
d directory 目录文件
- regular 普通文件 xxx.c xxx.txt 普通文件
a.out、xxx.jpg 二进制文件
l link 软连接文件 类似windows的快捷方式
s socket 套接字文件 网络通信
p pipe 管道文件 进程间通信
3.Linux下文件操作方法:
I:input O:output
1.标准IO
标准c库提供的一套文件操作接口。
--操作方法--
打开文件 fopen
读写 fgets/fputs() fgetc()/fputc() fread()/fwirte()
关闭文件 fclose()
2.文件IO
Linux内核为Linux系统提供的一套文件操作接口
--文件操作思想--
打开文件
读or写
关闭文件
3.函数接口
FILE *fopen(const char * pathname,const char *mode)
功能:打开一个文件,并且将文件关联到一个流上
参数:
pathname :要打开的文件名的指针
mode:打开方式,方式包括:
"r" 以只读方式打开,定位到文件的开头,文件必须存在
"r+" 以可读可写方式打开,定位到文件的开头,文件必须存在
"w" 以只写方式打开,文件不存在则创建,文件已存在清空
"w+" 以可读可写方式打开,文件不存在则创建,文件已存在清空
"a" 以追加写的方式打开,定位在末尾,不存在则创建
"a+" 以可读可写的方式打开,读在开头打开,写在末尾追加,不存在则创建
返回值:
成功:FILE*
失败:NULL
文件流:数据从文件流入和流出体现的字节流
FILE *-->文件流指针
标准IO:将一个打开的文件和一个文件流指针(FILE*)关联,后面操作文件,皆面向文件流指针
int fputc(int c,FILE *stream)
功能:将一个字符写入文件
参数:
c:写入的字符
stream:被写入的文件
返回值:
成功:返回写入的ASCII码值
失败:返回EOF (-1)
int fclose(FILE *stream);
功能:关闭一个文件
参数:stream:文件流指针
返回值:
成功:0
失败:EOF(-1)
int fgetc(FILE *stream);
//指针会自己向后移,则调一次指针会++一次
功能:从文件中读取一个字符
参数:
stream:要读的文件流指针
返回值:
成功:返回写入的ASCII码值
失败:返回EOF (-1)
int main(int argc,const char *argv[])
函数运行传参;格式:./a.out <filename>
argc-->程序运行时,传递给主函数的参数个数
argv-->指针数组
argv[0] --> ./a.out
argv[1] --> filename
fgetc和fputs如何读写终端:
终端:文件 操作系统默认打开了三个流:
FILE *
stdin --> 标准输入流 -->键盘
stdout --> 标准输出流 -->显示屏(终端)
stderr --> 标准出错流 -->显示屏(终端)
一个字节读写文件(普通文件与二进制文件都可copy)
int fputs(const char *s,FILE *stream);
功能:将字符串写入文件,不包括字符串结束标志'\0'。
参数:
s:字符串首地址
stream:要读的文件流指针
返回值:
成功:返回正数
失败:返回EOF
char *fgets(char * s,int size FILE * stream);
//输入什么输出什么包括换行(换行停止)
功能:从文件中读取一组数据
参数:
s:读取到的数据存储在s->buff
size:最多输出size-1个
stream:要读的文件流指针
返回值:
成功:返回存储数据的首地址
失败:返回NULL
读到文件末尾:NULL
fgets与scanf区别
fgets:遇到\n停止 可以读到\n
scanf: 遇到空格或者tab(空格制表符)停止 只能读到 空格
fgets与gets区别
fgets:char *fgets(char * s,int size FILE * stream) 包括换行
get: char *gets(char *s) 不包括换行
*gets是危险的,没有大小限制,造成越界访问
字符串打印 %s 字符打印 %c
阻塞:进程等待输入时停止运行(光标闪烁)
* od -c 1.txt 在终端查看1.txt的内容