Linux下一切皆文件。
可分为7种类型的文件:1、- 普通文件;2、c 字符文件;3、d 目录文件; 4、b 块设备; 5、l 链接文件; 6 、s socket文件;7 、p 管道文件。
按照存储的内容分类可分为两种:1、文本文件;2、二进制文件。
文本文件:以ASCII码存储的文件,EOF(-1)是文件的结束字符。
二进制文件:数据在内存中的原样存储在硬盘上。如视频、音乐、照片。
1.系统调用和库函数:
系统调用和库函数的区别:
1、系统调用不能被替换,库函数可以被替换。
2、系统调用通常提供最小接口,库函数实现的功能较为复杂。
3、系统调用运行的空间是内核空间,库函数运行的空间是用户空间。
4、系统调用一般返回整数值,库函数不一定。
5、系统调用的运行时间属于系统时间,库函数的运行时间属于用户时间。
6、系统调用的时间开销比库函数的时间开销大。
缓冲区:(由库函数提供)
按是否有缓冲区操作来分:
有缓冲区操作的:标准IO。
无缓冲区操作的:文件IO。
标准IO和文件IO的区别:
标准IO:
1、标准IO是库函数(ANSI C)提供的;
2、跨平台;
3、有缓冲机制;
4、文件流指针;
文件IO:
1、文件IO是系统调用 (POSIX、可移植操作系统接口、unix)提供的;
2、不能跨平台;
3、无缓冲机制;
4、文件描述符(整型、数组下标)。
文件流指针:
文件描述符:
2.标准IO:
缓冲方式:全缓冲、行缓冲和不缓冲。
全缓冲:缓冲区满或强制刷新缓冲区。
行缓冲:遇到换行符或者强制刷新缓冲区。
不缓冲:不缓冲(stderr)。
2.1 打开文件:
2.2 关闭文件:
2.3 操作文件:
2.3.1读和写:
2.3.1.1 按字符读写:
fgetc():函数参数:想要从中读取字符的文件流指针。函数返回值:读到的内容。
案例1模拟cat命令:
fputc():函数参数1:要写入的数据;函数参数2:要往哪个文件写。
案例2模拟cp命令:
2.3.2.2 按行读写:
fgets():
fputs():
案例3统计一个文件有多少行:
2.3.2.3 按对象读写:
fwrite():
fread():
2.3.2.4 按格式化读写:
fprintf():
fscanf():
2.3.2文件其他相关函数:
2.3.2.1 强制刷新缓冲区:
函数参数:要刷新的流
2.3.2.2 判断是否到末尾:feof()
函数参数:需要判断的的流
返回值:成功1,失败0。
2.3.2.3 fseek():移动光标
2.3.2.4 ftell():获取当前文件的光标所在位。
参数:要判断的流。
案例:获取文件的大小:
2.3.2.5 time()函数:
3、文件IO:
3.1 文件的打开:
由于自己刚毕业,在学校中自学的时候,权限一般都给0777。
3.2 文件掩码:
3.3 文件的操作:
3.3.1 read():
3.3.2 write():
案例:对文件的cp:
3.4 文件的关闭:
3.5 对目录文件进行操作:
3.5.1 打开(目录)文件:
3.5.2 操作文件:
3.5.2.1 读目录文件:
readdir():
案例:模拟ls-a:
案例:模拟ls-i-a:
案例:模拟ls:
3.5.2.2 获取文件状态:
stat:
案例模拟:ls-l:
3.5.2.3 关闭文件:
3.5.2.4 移动光标:
lseek: