管道

   创建内进程通道

//创建一个管道并且创建两个文件描述符
//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);