一、文件描述符
对于Linux而言,所有对设备或文件的操作都是通过文件描述符进行的。当打开或者创建一个文件的时候,内核向进程返回一个文件描述符(非负整数)。后续对文件的操作只需通过该文件描述符,内核记录有关这个打开文件的信息(file结构体)。
一个进程启动时,默认打开了3个文件,标准输入、标准输出、标准错误,对应文件描述符是0(STDIN_FILENO)、1(STDOUT_FILENO)、2(STDERR_FILENO),这些常量定义在unistd.h头文件中。
fileno:将文件指针转换为文件描述符
fdopen:将文件描述符转换为文件指针
二、什么是I/O
输入/输出是主存和外部设备之间拷贝数据的过程
设备->内存 (输入操作)
内存->设备 (输出操作)
高级I/O
ANSI C提供的标准I/O库称为高级I/O,通常也称为带缓冲的I/O
低级I/O
通常也称为不带缓冲的I/O
三、文件的打开关闭
open系统调用1:
函数原型
int open(const char *path, int flags);
参数
path :文件的名称,可以包含(绝对和相对)路径
flags:文件打开模式
返回值:
打开成功,返回文件描述符;打开失败,返回-1
open系统调用2:
函数原型
int open(const char *path, int flags,mode_t mode);
参数
path :文件的名称,可以包含(绝对和相对)路径
flags:文件打开模式
mode: 用来规定对该文件的所有者,文件的用户组及系 统中其他用户的访问权限
返回值:
打开成功,返回文件描述符;打开失败,返回-1
打开文件的方式: