写入文件是不要随意使用sizeof(buf),数据有多少就写多少。
将整数写入文件,整数根据主机的大小端存储方式显示整数十进制转二进制(共四字节)对应的字符形式,一字节对应一个字符。写入后读取回来没问题。
//注意优先级 == 优先级比 & 高 if((st.st_mode & S_IFMT) == S_IFREG)
nlink_t st_nlink; /* 硬链接的个数 */(到底是硬链接还是软链接)
diff filename1 filename2 //判断两个文件是否相同
行缓冲:和终端相关的缓冲 stdin stdout 大小1024
1、遇到换行符‘\n’
2、程序结束
3、输入和输出切换
4、关闭文件时fclose()
5、手动刷新fflush()
6、缓冲满时刷新
全缓冲:和文件相关的 fopen打开的文件 大小4096
1、遇到换行符‘\n’不会刷新
2、程序结束
3、输入和输出切换
4、关闭文件时fclose()
5、手动刷新fflush()
6、缓冲满时刷新
无缓冲:stderr
缓冲区大小0(有时是1,表示作用)
int open(const char *path, int access,int mode)
path 要打开的文件路径和名称
access 访问模式,宏定义和含义如下:
O_RDONLY 1 只读打开
O_WRONLY 2 只写打开
O_RDWR 4 读写打开
还可选择以下模式与以上3种基本模式相与:
O_CREAT 0x0100 创建一个文件并打开
O_TRUNC 0x0200 打开一个已存在的文件并将文件长度设置为0,其他属性保持
O_EXCL 0x0400 未使用
O_APPEND 0x0800 追加打开文件
O_TEXT 0x4000 打开文本文件翻译CR-LF控制字符
O_BINARY 0x8000 打开二进制字符,不作CR-LF翻译
mode 该参数仅在access=O_CREAT方式下使用,其取值如下:
S_IFMT 0xF000 文件类型掩码
S_IFDIR 0x4000 目录
S_IFIFO 0x1000 FIFO 专用
S_IFCHR 0x2000 字符专用
S_IFBLK 0x3000 块专用
S_IFREG 0x8000 只为0x0000
S_IREAD 0x0100 可读
S_IWRITE 0x0080 可写
S_IEXEC 0x0040 可执行
FILE *fopen(char *filename, char *mode)
filename 文件名称
mode 打开模式:
r 只读方式打开一个文本文件
rb 只读方式打开一个二进制文件
w 只写方式打开一个文本文件
wb 只写方式打开一个二进制文件
a 追加方式打开一个文本文件
ab 追加方式打开一个二进制文件
r+ 可读可写方式打开一个文本文件
rb+ 可读可写方式打开一个二进制文件
w+ 可读可写方式创建一个文本文件
wb+ 可读可写方式生成一个二进制文件
a+ 可读可写追加方式打开一个文本文件
ab+ 可读可写方式追加一个二进制文件
fgets按行获取,遇到‘\n’结束,且安全,会在最后一位添加‘\0’
gets不安全,未知大小获取。
sprintf()不安全,对buf大小不做检查,有越界风险,错误不可预知。
snprintf()安全,会对buf数组大小做检查,会报错,指定大小写入,没有越界的风险。