说明: 基于 POSIX(Portable Operating System Interface) 标准,采用 C 语言,实现了为应用程序提供与操作系统内核通信的服务的API。
-
系统调用名:open
-
头文件:unistd.h
-
功能:打开 path 所指的文件
-
函数定义:
-
int open(const char *path, int oflags)
-
int open(const char *path, int oflags, mode_t mode)
-
-
其中:
-
path: 文件所在路径
-
oflags: 设置 open 文件操作类型
-
mode: 设置 open 文件模式
-
返回值: 打开成功,返回一个唯一的文件描述符;不成功,返回 -1,并设置相应的 errno 变量以指明出错的原因
-
-
系统调用名:close
-
头文件:unistd.h
-
功能:将与 fildes 文件描述符相关联的文件断开
-
函数定义:
- int close(int fildes)
-
其中:
-
fildes: 文件描述符
-
返回值: 关闭成功,返回 0;不成功,返回 -1
-
-
系统调用名:write
-
头文件:unistd.h
-
功能:将 buff 中的前 nbytes 个字节的数据写入到与 fildes 相关联的文件描述符中
-
函数定义:
- *size_t write(int fildes, const void buff, size_t nbytes)
-
其中:
-
fildes: 文件描述符
-
buff: 数据的来源
-
nbytes: 数据的长度(以字节为单位)
-
返回值: 写入成功,返回值的范围为 0~nbytes;不成功,返回 -1,对应错误代码保存在全局变量 errno 中
-
-
系统调用名:read
-
头文件:unistd.h
-
功能:将与 fildes 文件描述符相关联的文件的前 nbytes 个字节的数据读入到 buff 中
-
函数定义:
- *size_t read(int fildes, const void buff, size_t nbytes)
-
其中:
-
fildes: 文件描述符
-
buff: 数据的来源
-
nbytes: 数据的长度(以字节为单位)
-
返回值: 读取成功,返回值的范围为 0~nbytes;不成功,返回 -1,对应错误代码保存在全局变量 errno 中
-
-
系统调用名:fcntl
-
头文件:fcntl.h
-
功能:修改某个文件描述符的特性
-
函数定义:
-
int fcntl(int fildes, int cmd)
-
int fcntl(int fildes, int cmd, long arg)
-
int fcntl(int fildes, int cmd, struct flock *lock)
-
-
其中:
-
fildes: 需要修改属性的文件描述符
-
cmd: 将要操作的指令,其中指令如下
-
F_DUPFD 用来查找大于或等于参数 arg 的最小且仍未使用的文件描述符,并且复制参数 fildes 的文件描述符。执行成功则返回新复制的文件描述符。新描述符与 fildes 共享同一文件表项,但是新描述符有它自己的一套文件描述符标志,其中 FD_CLOEXEC 文件描述符标志被清除。
-
F_GETFD 取得 close-on-exec 旗标。若此旗标的 FD_CLOEXEC 位为 0,代表在调用 exec() 相关函数时文件将不会关闭。
-
F_SETFD 设置 close-on-exec 旗标。该旗标以参数 arg 的 FD_CLOEXEC 位决定。
-
F_GETFL 取得文件描述符状态旗标,此旗标为 open() 的参数 flags。
-
F_SETFL 设置文件描述符状态旗标,参数 arg 为新旗标,但只允许 O_APPEND、O_NONBLOCK 和 O_ASYNC 位的改变,其他位的改变将不受影响。
-
F_GETLK 取得文件锁定的状态。
-
F_SETLK 设置文件锁定的状态。此时 flock 结构的 l_type 值必须是 F_RDLCK、F_WRLCK 或 F_UNLCK。如果无法建立锁定,则返回 -1,错误代码为 EACCES 或 EAGAIN。
-
F_SETLKW F_SETLK 作用相同,但是无法建立锁定时,此调用会一直等到锁定动作成功为止。若在等待锁定的过程中被信号中断,会立即返回 -1,错误代码为 EINTR。
-
-
lock: flock 结构指针定义如下
struct flock { short int l_type; short int l_whence; off_t l_start; off_t l_len; pid_t l_pid; };
-
返回值: 返回成功,依赖于 cmd 的值;不成功,返回 -1,错误原因存于 errno 中
-
-
系统调用名:lseek
-
头文件:unistd.h
-
功能:设置与文件描述符 fildes 相关的文件或设备的读写指针位置
-
函数定义:
- size_t lseek(int fildes, off_t offset, int whence)
-
其中:
-
头文件:
-
功能:获取文件的相关状态信息
-
函数定义:
-
int fstat(int fildes, struct stat *buff)
-
int stat(const char *path, struct stat *buff)
-
int lstat(const char *path, struct stat *buff)
-
-
其中:
-
fildes: 文件描述符
-
path: 文件的路径
-
buff: 结构体 struct stat 的大小,buff 结构指针定义如下
struct stat { dev_t st_dev; /* 文件所在设备的标识 */ ino_t st_ino; /* 文件结点号 */ mode_t st_mode; /* 文件保护模式 */ nlink_t st_nlink; /* 硬连接数 */ uid_t st_uid; /* 文件用户标识 */ gid_t st_gid; /* 文件用户组标识 */ dev_t st_rdev; /* 文件所表示的特殊设备文件的设备标识 */ off_t st_size; /* 总大小,单位为字节 */ blksize_t st_blksize; /* 文件系统的块大小 */ blkcnt_t st_blocks; /* 分配给文件的块的数量,512 字节为单位 */ time_t st_atime; /* 最后访问时间 */ time_t st_mtime; /* 最后修改时间 */ time_t st_ctime; /* 最后状态改变时间 */ };
-
返回值: 成功,返回 0;不成功,返回 -1,错误原因存于 errno 中
-
-
系统调用名:mmap
-
头文件:sys/mman.h
-
功能:将虚拟地址映射到物理地址,或者映射到文件和文件位置
-
函数定义:
- void* mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t offset)
-
其中:
-
addr: 内存起始地址
-
len: 内存分配长度
-
prot: 设置内存段访问权限
-
PROT_READ 表示文件可读。
-
PROT_WRITE 表示文件可写。
-
PROT_EXEC 表示文件可执行。
-
PROT_NONE 表示文件不可访问
-
-
flags: 控制程序对该段内存的访问方式,在调用 mmap() 时必须要指定 MAP_SHARED 或 MAP_PRIVATE 其一
-
MAP_SHARED 对映射区域的写入数据会复制回文件内,而且允许其他映射该文件的进程共享。
-
MAP_PRIVATE 对映射区域的写入操作会产生一个映射文件的复制,即私人的“写入时复制”(copy on write)对此区域作的任何修改都不会写回原来的文件内容。
-
MAP_FIXED 如果参数 start 所指的地址无法成功建立映射时,则放弃映射,不对地址做修正。通常不鼓励用此旗标。
-
MAP_ANONYMOUS 建立匿名映射。此时会忽略参数 fildes,不涉及文件,而且映射区域无法和其他进程共享。
-
MAP_DENYWRITE 只允许对映射区域的写入操作,其他对文件直接写入的操作将会被拒绝。
-
MAP_LOCKED 将映射区域锁定住,这表示该区域不会被置换(swap)。
-
-
fildes: 文件描述符
-
offset: 设置的参照位置
-
whence: 相对于参照位置的偏移量
-
返回值: 返回值为最后文件映射到进程空间的地址,进程可直接操作起始地址为该值的有效地址。
-
-
系统调用名:munmap
-
头文件:sys/mman.h
-
功能:释放内存段
-
函数定义:
- int munmap(void *addr, size_t len)
-
其中:
-
addr: 内存起始地址
-
len: 内存分配长度
-
返回值: 如果解除映射成功则返回 0,否则返回 -1,错误原因存于 errno 中
-