富贵不还乡,锦衣夜行!
一。文件I/o:万事万物皆I/O,万事万物皆描述符。
1.打开文件描述符号
#include <fcnl.h>
int open(pathename,flags)
int open(pathename,flags,mode_t)
返回-1表示打开为文件失败。如果>=0:表示打开文件成功,并且返回这个文件所对应的id.
功能:创建/打开文件
参数1:文件名+路径
参数2:创建和打开的方式
参数3:只对创建有效:权限,打开无效;权限
参数2:2种打开方式:
1。创建并打开:
O_CREAT
2。直接打开
0
3.必须参数:
O_RDONLY O_WRONLY O_RDWR 3选1,且必须的。
4。辅助参数
创建的辅助参数:O_EXCL 文件不存在创建,存在则返回错误-1。目的:防止覆盖文件。
打开的辅助参数:O_APEND 文件记录指针在末尾
O_TRUNC 打开文件,并把文件内容清空。//只对打开的文件有意义。
其他辅助标记:(很少使用)
O_DIRECT 尽量少用缓存
O_ASYN用异步方式打开。
总结 文件的打开:
创建
O_RDONLY | O_CREAT
O_RDONLY | O_CREAT | O_EXCL
打开
O_RDONLY
O_RDONLY | O_APPEND
O_NOATIME打开这个文件,但是不改变文件访问时间。
案例1:open.c
打开文件,读取其中的数据。
案例2:
创建文件,把键盘输入的数据写入文件
注意:O_TRUNC 只对写或者读写有效。 O_APPEND对读写都有效。
案例3:
格式数据的保存与读取。即:整数就是整数,字符就是字符:----即二进制的保存与读取:结构体数据保存。
数据: tom 18 99.99 m
jack 19 88.88 m
rose 20 77.77 f
结论:
1。整数保存是作为4个字节保存的。使用cat显示的时候整数就分成4个字符来显示,这4个字符的ASCII 就是我们整数的4个字节,每个字节对应的整数,而且这个整数对应的ASCII码没有对应的字符或者图形,则整数作为4个字符打印就会出现乱马。--------整数作为乱马显示的原因。
2。什么是2进制文件,什么是文本文件。
不管什么文件都是使用二进制保存的。
但文本文件的二进制:把整数转化为文本,在把文本转为2进制。
和二进制文件的二进制:整数直接整数保存
比如:88作为文本保存:2个8字符ASCII保存,再把ASCII转为2进制。
88作为2进制保存:直接把88转为二进制保存
*文本文件是人为的。同样的数据用文本保存和用二进制保存是不确定的,不能说文本比二进制大,二进制比文本大的说法;
但是二进制比我们的字符节省空间。
乱马出现鸢鹰:
没有使用保存时对应格式读取,则一般是乱马。
当我们读取某个格式的文件的数据不对,一般是读取格式和写入的格式不匹配造成。
二进制文件使用什么格式写,就用什么格式读。(外挂!)
d.字符串在格式数据中,建议不要有多长写多长,而是固定长度写:1。速度快 2。方便读取。
是:char name[30];r=read(fd,name,sizeof(name));
不是:char name[30];r=read(fd,name,sizeof(strlen(name)));
2。打开网卡描述符号
3。关闭文件描述符