Skip to content
This repository has been archived by the owner on Feb 1, 2022. It is now read-only.

Latest commit

 

History

History
291 lines (257 loc) · 5.92 KB

notes.md

File metadata and controls

291 lines (257 loc) · 5.92 KB

第03章 文件I/O

章节目录 函数表


文件描述符

内核通过文件描述符引用文件文件描述符是一个非负整数介于 0 ~ OPEN_MAX-1 之间标准输入0   STDIN_FILENO
标准输出1   STDOUT_FILENO
标准错误2   STDERR_FILENO
建议使用宏而不是常数

函数open和openat

int open(const char *path, int oflag, ... /* mode_t mode */);
int openat(int fd, const char *path, int oflag, ... /* mode_t mode */);

头文件fcntl.h
功能打开或创建一个文件
返回值若成功返回最小的没有使用的文件描述符若出错返回-1形参说明path打开或创建文件的名字
    oflag说明此函数的多个选项用一个或多个常量进行位或运算构成具体见下表mode最后一个参数可选参数仅创建文件时才使用指定创建文件的权限fd把openat函数和open函数区分开有三种可能:
        (1) path是绝对路径openat 等同于 open。
        (2) path是相对路径开始地址是 fd 指向的目录。
        (3) path是相对路径fd 参数具有特殊值 AT_FDCWD开始地址是 当前工作目录示例代码char path[] = "test_file.txt";
打开文件的用途 O_RDONLY O_WRONLY O_RDWR O_EXEC O_SEARCH
常用标志 O_CREAT O_EXCL O_CLOEXEC O_DIRECTORY
针对特殊文件 O_NOFOLLOE O_NONBLOCK O_NOCTTY O_TTY_INIT
文件偏移量 O_APPEND O_TRUNC
同步选项 O_SYNC O_DSYNC O_RSYNC
序号 flag 说明 备注
1 O_RDONLY 只读打开 互斥,只能指定一个
2 O_WRONLY 只写打开
3 O_RDWR 读、写打开
4 O_EXEC 只执行打开
5 O_SEARCH 只搜索打开,应用于目录,支持的系统较少。
6 O_APPEND 每次写时都追加到文件的尾端。
7 O_CLOEXEC 把FD_CLOEXEC常量设置为文件描述符标志。 执行时关闭。
8 O_CREAT 若此文件不存在则创建它。 使用此选项时,需要指明 open/openat 函数的最后一个参数。
9 O_DIRECTORY 如果path引用的不是目录,则出错。
10 O_EXCL 如果同时指定了O_CREAT,而文件存在,则出错。 用此可以测试一个文件是否存在,如果不存在则创建。并且测试和创建是一个原子操作。

函数create

int creat(const char *path, mode_t mode)

头文件fcntl.h
功能创建一个新文件返回值若成功返回为只写打开的文件描述符若出错返回-1形参说明path创建文件的名字mode新文件的访问权限位示例代码open函数可以替代creat函数creat(path, mode); <==> open(path, O_WRONLY | O_CREAT | O_TRUNC, mode);

    以读写方式创建一个文件open(path, O_RDWR | O_CREAT | O_TRUNC, mode);

函数close

int close(int fd);

头文件unistd.h
功能关闭一个打开的文件返回值若成功返回0若失败返回-1形参说明fd文件描述符1当一个进程终止时 自动 关闭它所有的打开文件可以不显式调用此函数关闭2关闭一个文件时还将释放该进程加在该文件上的所有记录锁示例代码close(STDOUT_FILENO);

函数lseek

头文件功能返回值形参说明示例代码

函数read

头文件功能返回值形参说明示例代码

函数write

头文件功能返回值形参说明示例代码

I/O的效率

文件I/O的数据结构

原子操作

函数dup和dup2

头文件功能返回值形参说明示例代码

章节目录 函数表