管道
创建内进程通道
//创建一个管道并且创建两个文件描述符
//fildes[0]: 读管道端
//fildes[1]:写管道端
int pipe(int filedw[2]);
文件描述符控制
复制一个打开文件描述符
//两个选择的接口,用到了 F_DUPFD 命令
int dup(int fildes);
int dup2(int fileds, int fileds2);
撤除文件描述符
关闭一个文件
int close(int fildes);
输入和输出
文件读
ssize_t read(int fildes, void *buf, size_t nbyte);
文件写
ssize_t write(int fildes, const void *buf, size_t nbyte);
一个文件的控制操作
文件控制
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
/*为打开的文件提供了一系列控制
*fildes: 一个文件描述符
*cmd: 决定了控制的内容
*/
int fcntl(int fildes, int cmd, ...);
读/写文件偏移量的重新定位
#include <sys/types.h>
#include <unistd.h>
//为 fildes 所指定的文件重新设置偏移量
off_t lseek(int fildes, off_t offset, int whence);
文件同步
文件的状态同步
#include <unistd.h>
//用来暗示所有的文件描述数据被传输到了存储设备上
int fsync(int fildes);
文件数据的同步
#include <unistd.h>
//迫使当前所有排队的 I/O 操作进入同步I/O 状态
int fdatasync(int fildes);
异步输入与输出
异步输入与输出的数据定义
头文件<aio.h>能使<sys/types.h>, <signal.h>, <time.h>和<fcntl.h>中的符号可见
异步 I/O 控制块
异步 I/O 控制块结构 aiocb 在许多异步 I/O 接口中使用,它在<aio.h>中定义
异步读
#include <aio.h>
/*
*aiocbp->io_nbytes: 读 的 字 节 数
*aiocbp->aio_fildes: 读 的 文 件
*aiocbp->aio_buf: 读到的缓冲区
*/
int aio_read(struct aiocb *aiocbp);
异步写
#include <aio.h>
/*
*aiocbp->io_nbytes: 读 的 字 节 数
*aiocbp->aio_fildes: 读 的 文 件
*aiocbp->aio_buf: 读到的缓冲区
*/
int aio_write(struct aiocb *aiocbp);
列出直接 I/O
#include <aio.h>
//允许用一个函数调用初始化一个 I/O 请求列表
int lio_listio(int mode,
struct aiocb *const list[],
int nent,
struct sigevent *sig);
得到异步 I/O 操作的错误状态
#include <aio.h>
//返回 aiocbp 指向的结构所表示的错误状态
ssize_t aio_return(struct aiocb *aiocbp);
得到异步 I/O 操作的返回状态
#include <aio.h>
ssize_t aio_return(struct aiocb *aiocbp);
删除异步 I/O 请求
#include <aio.h>
//fildes: 文件描述符
//aiocbp: 指向异步 I/O控制块上的请求删除部分
int aio_cancel(int fildes, struct aiocb *aiocbp);
等待异步 I/O 请求
#include <aio.h>
//挂起调用进程直到至少一个 list 指向的异步 I/O 操作完成 或 一个信号中断了一个函数 或 超时了(timeout 指定)
int aio_suspend(const struct aiocb *const list[],
int nent,
const struct timespec *timeout);
异步文件同步化
#include <aio.h>
//迫使所有与 (aiocbp 指向的)结构 aiocb中 aio_fildes 所指定的文件相关异步 I/O 操作进入同步状态
int aio_fsync(int op, struct aiocb *aiocbp);