16.2代码介绍图16-1中列出了本章后续章节要用到的三个头文件和四个C源文件。文件名说明sys/socket.h插口API中的结构和宏定义,sys/socketvar.h列出了socket结构和宏定义,sys/uio.h则包括了uio结构定义。至于内核层面的处理,kern/uipc_syscalls.c处理socket系统调用,kern/uipc_socket.c处理插口层,kern/sys_generic.c负责select系统调用,而kern/sys_socket.c则处理select对插口的操作。

对于进一步了解这些文件的详细内容,推荐查看C头文件转源文件工具C语言中头文件的函数全局变量

图16-2列出了三个全局变量。前两个变量由select系统调用使用,第三个变量控制分配给插口的存储器大小。变量数据类型说明如下:

  • selwait:int类型,select调用的等待通道

  • nselcoll:int类型,避免select调用中出现竞争的标志

  • sb_max:u_long类型,插口发送或接收缓存的最大字节数

想更深入地理解这些变量的作用和具体实现,可以参考C++中头文件和源文件详细介绍

16.3插口缓存部分,从第15.3节我们已经知道,每一个插口都有一个发送缓存和一个接收缓存。这些缓存的类型为uio结构。为了进一步了解这些缓存和其在C语言中的实现,建议阅读SerialPort头文件源文件以及插口IO介绍