Linux——基础IO
一.文件理解
我们要进行文件操作,前提是我们的程序跑起来了,文件的打开和关闭,是CPU在执行代码。
打开一个文件,本质上是进程打开文件。
文件没有被打开时,会在磁盘中存在。
进程能够打开很多文件,很多情况下,在OS内部,一定存在大量被打开的文件。
每打开一个文件,在OS内部,一定要存在对应的描述文件属性的结构体,类似PCB。
“>”符号,即输出重定向,也是文件操作,可以用来新建文件,清空文件,与用“w”方式打开文件一样。
“>>”符号,为追加重定向,与用“a”方式打开文件一样。
文件->磁盘->外设->硬件->向文件中写入,本质是向硬件中写入->用户没有权利直接写入->OS是硬件的管理者->通过OS写入->OS必须给我们提供系统调用(OS不相信任何人)->fopen/fwrite/fread/fprintf/fscanf/scanf/printf/cin/cout...->我们用的C/C++等语言,都是对系统调用接口的封装。
二.系统调用文件操作
#include
#include
#include//文件打开
int open(const char *pathname, int flags);
int open(const char *pathname, int flags, mode_t mode);
#include
//文件关闭
int close(int fd);
#include
//文件写入
ssize_t write(int fd,const void *buf,size_t count);(文件描述符,缓冲区,缓冲区大小)
#include
//文件读取
ssize_t read(int fd, void *buf, size_t count);(文件描述符,缓冲区,缓冲区大小)
open是OS系统下调用文件操作接口,其中第一个用于操作已有的文件,第二个用于操作新文件。
1.参数
open:
pathname:文件名
flags:文件操作方式
mode:设置文件权限(二进制方式)
由open创建的新文件都必须给出文件的权限。
但是我们默认创建的权限会与系统默认的权限掩码umask其冲突, 可以使用umask函数更改权限掩码。
flags为文件操作方式,可以有多个同时使用,使用“|”隔开:
- O_WRONLY:只写
- O_CREAT:不存在就创建
- O_TRUNC:清空文件内容
- O_ADDEND:从末尾追加内容
- O_RDONLY:只读
2.返回值
open函数的返回值称为文件描述符fd,其本质为内核的进程与文件映射关系的数组的下标。
在操作系统中,每一个被操作的文件,都会链入类型为struct file的文件