1.文件打开及创建
1.1 文件描述符fd(file discribtion)
open的返回值即为文件描述符
用于write,read
如下图
1.2 open函数的使用
1.2.1参数说明
pathname:char*型,为文件路径
flags:O_RDONLY:可读打开
O_WRONLY:可写打开
O_RDWR:可读可写打开
O_CREAT :若文件不存在则创建它。使用此选项时,需要同时说明第三个 参数mode,用其说明该新文件的存取许可权
O_EXCL:如果同时指定了OCREAT,而文件已经存在,则出错。
(如果文件已经存在则返回值为-1)
O_APPEND:每次写时都加到文件的尾端。
O_TRUNC:属性去打开文件时,如果这个文件中本来是有内容的,而且为 只读或只写成功打开.则将其长度截短为0。
mode:文件权限 可读:0400
可写:0200
可执行:0100
如下图
Demo——O_EXCL:
Demo——O_APPEND:
Demo——O_TRUNC:
1.2.2返回值
如果打开成功,fd为非负整数
如果打开失败,fd为-1
1.3文件的权限
ls-l 显示文件清单
-rwx
r:可读权限
w:可写权限
x:可执行权限
如下图
1.4 creat函数
1.4.1 参数说明
pathname:文件路径
mode:创建模式
1.4.2 mode的宏
Demo如下:
2.文件写入操作
2.1 write函数
2.1.1参数说明
fd:文件描述符
buf:缓冲区数据
count:需要从缓冲区写入的数据大小
通常用strlen(buf)
2.1.2返回值
写入成功:写入的个数
写入失败:-1
如下图
2.2 close函数
2.2.1参数说明
fd:文件描述符
2.2.2返回值
成功返回0
失败返回-1
如下图
Demo如下:
3.文件读取操作
3.1 read函数
3.1.1参数说明
fd:文件描述符
buf:将读取的文件放入的缓冲区
count:要从目标文件读取的内容大小
3.1.2返回值
成功:读取的字节数
失败:-1
3.1.3错误信息
EAGAIN(用perror打印出来)
如下图
3.1.4开辟存储空间
3.2光标问题
3.2.1如何将光标移动到开头
1.重新打开文件
2.lseek
如下图
Demo如下
4.文件光标移动操作
4.1 lseek函数
4.1.1 参数说明
fd:文件描述符
offset:将文件读写指针相对whence移动offset个字节
whence:SEEK_SET——文件开头
SEEK_CUR——当前位置
SEEK_END——文件结尾
如下图
4.1.2返回值
成功:文件字节数
失败:-1
Demo如下:
5.文件操作原理简述
5.1文件描述符
5.1.1系统默认文件描述符
0:标准输入
1:标准输出
2:标准错误
5.2文件操作
5.2.1动态文件和静态文件
静态文件:平时存放在磁盘的文件
动态文件:open静态文件后产生的文件,在内核中产生结构体,存放文件标识 符,信息节点,以及buf缓冲区
用内存读写比较灵活,用块读写不灵活
6.实现cp指令
6.1代码思路
6.2 代码Demo
7.修改配置文件
7.1代码思路
7.2 strstr函数
7.2.1函数参数
参数1:要在哪个字符串中查找
参数2:要查找的内容
7.2.1返回值
指向要查找的首位置的指针变量
7.3代码Demo
8.写入一个结构体到文件
8.1代码Demo
9.标准C库对文件操作引入
9.1 open和fopen的区别
9.1.1来源
9.1.2移植性
9.1.3适用范围
9.1.4文件IO层次
9.1.5缓冲
10.标准C库打开创建文件读写文件光标移动
10.1 打开创建文件
10.1.1 fopen函数
10.1.1.1参数说明
path:文件路径,mode:权限
注意:mode为指针变量,应该加双引号,如"w+"
代码Demo
10.2.1 fwrite函数
10.2.1.1参数说明
ptr 缓冲区
size 单个字符的大小
nmemb 字符的数量
stream 要写的文件
10.2.1.2返回值
return:nmemb
两种写法
10.3.1 fread函数
10.3.1.1参数说明
同fwrite
10.3.1.2返回值
实际读的次数
10.4.1 fseek函数
10.4.1.1参数说明
stream fopen返回值
offset 偏移值
whence 何处(参数同lseek)
代码Demo
11.标准C库写入结构体到文件
与Linux API写法类似
12.文件其他函数
12.1 fputc函数
12.1.1 参数说明
c:要写入的字符
stream:要写入的文件
Demo
12.2 feof函数
12.2.1 参数说明
stream:fopen的返回值
12.2.1 返回值
光标到文件的尾巴:非0
光标没有到文件的尾巴:0
12.3 fgetc函数
12.3.1 参数说明
stream:fopen的返回值
Demo
Linux系统编程——文件完结