/**
* 《Unix Lesson 5》
* @高级I/O
* 非阻塞IO
* 读写打开类IO操作不会进行阻塞,如果这种才做不能完成则直接返回错误。
*
* 记录锁 【字节区域锁】
* 如果某个进程正在读写某个文件,使用记录锁组织其他进程进行相同的文件区读写
*
* 存储映射I/O
* 将磁盘文件映射到存储缓冲区中,从缓冲区读数据就是从磁盘读取数据
* 写入缓冲区也就是输出文件操作
*
* #尽量少的系统调用次数完成任务
* 优化目的之一
*
* @进程间通信
* #管道
* 进程创建管道,创建新的进程。执行父进程和进程之间的IPC
*
* @网络套接字
* 套接字#套接字是通信端点的抽象。
*
* #寻址
* 进程标识
* 计算机网络地址标识
* 标识网络上与之通信的计算机
* 计算机端口标识服务
* 标识特定的进程服务
*
* 1.字节序
* 一种处理器架构特性
* 用于指示向整数类似的大的数据类型内部的字节是如何排序。(大小端)
* 大端 最大字节底子出现在最低有效字节上 Least Significant Byte
* 小端 自己顺序相反 最高有效字节包含最小自己地址
* #无论字节如何排序,最高有效字节总是最左。最低有效字节总是右边。
*
* 网络协议指定了字节序
* 异构计算机系统能够交换协议信息而不被字节序锁混淆
* TCP/IP 协议栈使用大端模式
*
* 2.地址格式
* 一个地址标识一个特定通信域的套接字端点
* 地址格式与这个特定的通信的地址结构。
*
* 3.地址查询
* 获取主机网络相关信息服务函数查询和静态文件
* /etc/hosts
*
* 4.套接字和地址关联
* 使用bind函数关联地址和套接字
* 进程正在运行的计算机上,指定地址必须有效
* 地址必须和创建套接字时的地址族所支持的格式匹配
* 地址中的端口号必须不小于1024,除非该进程具有特权,如root
* 一般情况只能将一个套接字端点绑定到一个给定地址上,有些协议允许多重绑定。
* ---
* 对于因特网域。如果指定IP地址为INADDR_ANY
* 套接字端点可以被绑定在所有的系统网络接口上。
* 这意味着可以接收这个系统所安装的任何一个网卡的数据包。
*
* #建立链接
* 如果要处理一个面向链接的网络服务
* 那么在开始交换数据之前需要请求服务的进程套接字和提供服务进程的套接字之间建立链接;(connect函数)
*
* #数据传输
* send.sendto,recv函数
*
* #套接字选项
* 提供两个套接字选项接口控制套接字行为
* 设置套接字选项
* 查询选项状态
* --
* 通用选项-工作在所有套接字类型上
* 在套接字层次管理的选项,但是依赖于下层协议的支持
* 特定于某种协议的选项,每个协议独有的
*
* #带外数据
* out-of-band-data是一些通信协议所支持的可选功能
* 与普通数据相比,允许更高优先级的数据传输
* 带外数据是先行数据,即使传输队列已经有数据
* ---
* TCP支持,支持一个字节的紧急数据,UDP不支持
*
* #非阻塞和异步I/O
* recv函数没有数据可用时会进行阻塞等待
* 当套接字输出队列没有足够空间来发送消息,send函数阻塞
* --在套接字非阻塞模式下。行为会改变。这种情况下,函数不会阻塞而是会失败。
*/
来源《unix环境高级编程》