ls -i 查看文件i节点号
文件类型
- 普通文件 元数据如存储类型、权限、大小、用户组、各种时间戳等存储在i节点,内容数据存储在数据块中
d 目录文件 有自己i节点,数据块存文件名和对应的i节点(硬链接)。根目录i节点固定,依次遍历查找。.当前目录i节点..上层目录i节点
s 本地套接字
c 字符设备
b 块设备
l 符号链接 ln -s 目标 新文件 有自己i节点,数据块存目标文件完整路径(软链接)
p 有名管道 只有i节点,没数据块。表示一块存储区打开/创建文件
#include<fcntl.h>
int open(char const* pathname, int flags, mode_t mode);
功能:打开已有文件或创建新文件
参数:pathname 文件路径
flags 状态标志,以下参数
O_RDONLY 只读
O_WRONLY 只写
O_RDWR 读写
O_APPEND 追加
O_CREAT 不存在时创建,存在时打开
O_EXCL 不存在时创建,存在时报错
O_TRUNC 不存在时创建,存在时清空
mode 权限模式,仅创建新文件时有效,三位8进制表示
r 读 4
w 写 2
x 执行 1
返回值:未被使用的最小文件描述符
权限掩码 umask关闭文件
#include <unistd.h>
int close(int fd)
功能:关闭处于打开状态的文件描述符
参数:fd 处于打开状态的文件描述符文件的内核结构
调用open时,内存中,文件表项存储文件状态标志、读写位置、v节点指针等信息,v节点存储i节点等。同时打开一个文件时维护多个文件表项
进程表中文件描述符表(指针数组)存储文件表项地址
文件描述符 == 文件描述符表中数组下标
系统内核为每个进程打开三个文件描述符,在unistd.h中被定义为三个宏
#define STDIN_FILENO 0 标准输入
#define STDOUT_FILENO 1 标准输出
#define STDERR_FILENO 2 标准错误