文件IO-介绍
区别
标准IO遵循的是ANSI C(c标准),带缓存,流 FILE
文件IO遵循的是POSIX,无缓存,文件描述符 fd
linux下,标准IO基于文件IO实现
文件IO-文件描述符
- 每个打开的文件都对应一个文件描述符
- 文件描述符是非负整数,linux为程序中每个打开的文件分配一个文件描述符
- 文件描述符从0开始分配,一次递增
- 文件IO操作通过文件描述符完成
文件IO-open
#include <fcntl.h>
int open(const char *path,int oflag, ...);//打开文件时使用两个参数,创建文件时,用三个参数,第三个设定文件权限
int open(const char *path,int flags,mode_t mode); | |
path | 被打开的文件名(可包含路径名) |
flags | O_RDINLY:只读方式打开文件 |
O_WRONLY:只写方式打开文件 | |
O_RDWR:可读写方式打开文件 | |
O_CREAT:若文件不存在,则新建,并用mode设置权限 | |
O_EXCL:如果使用O_CREAT时文件存在,则返回错误信息。这参数可测试文件是否存在。 | |
O_NOCTTY:使用本参数时,如文件为终端,那么终端不可以作为调用open()系统调用的那个进程的控制终端 | |
O_TRUNC:如文件已存在,打开文件时先删除文件原有数据 | |
O_APPEND:以追加方式打开文件 | |
mode | 被打开文件的存取权限,8进制表示方式 |
//eg1:以只写方式打开文件test1.txt。如果问价不存在则创建,否则清空打开。
int fd;
if((fd = open("test1.txt",O_WRONLY|O_CREAT|O_TRUNC,0666)) < 0){
perror("open");
return -1;
}
//eg2:以读写方式打开文件test1.txt。如果问价不存在则创建,否则报错。
int fd;
if((fd = open("test1.txt",O_RDWR|O_CREAT|O_EXCL,0666)) < 0){
if(errno == EEXIST){
perror("exist error");
else{
perror("other error");
}
}
文件IO-close
#include <unistd.h>
int close(int fd);