io插槽是什么(io扩展槽)

对文件的操作,除了最基本的打开、关闭、读、写、定位之外,还有很多特殊的情况,比如用于沟通应用层与底层驱动之间的ioctl、万能工具箱fcntl、内存映射mmap等等,熟练使用这些API,是日常开发的必备技能。


一、ioctl()

该函数是沟通应用层和驱动层的有力武器,底层开发人员在为硬件设备编写驱动的时候,常常将某些操作封装为一个函数,并为这些接口提供一个所谓的命令字,应用层开发者可以通过 ioctl() 函数配合命令字,非常迅捷地绕过操作系统中间层层机构直达驱动层,调用对应的功能。

从这个意义上讲,函数 ioctl() 像是一个通道,只提供函数调用路径,具体的功能由所谓命令字决定,下面是函数的接口规范说明:


二、fcntl()

该函数的名字是 file control 的缩写,顾名思义,它可以用来“控制”文件,与 ioctl 类似,此处的 “控制” 含义广泛,具体内容由其第二个参数命令字来决定,fcntl 接口规范如下:


关键点:fcntl 是个变参函数,前两个参数是固定的,后续的参数个数和类型取决于 cmd 的具体数值。第二个参数 cmd,称为命令字。命令字有很多,常用的如下:


从上表可以看出:

F_DUPFD的功能与dup( )/dup2( )类似。通过F_SETSL/F_GETFL来获取和设置文件status,经常拿来设置文件的阻塞特性。通过F_SETOWN/F_GETOWN来获取和设置套接字触发的信号的属主,网络编程中常见。


三、mmap()

该函数全称是 memory map,意为内存映射,即将某个文件与某块内存关联起来,达到通过操作这块内存来间接操作其所对应的文件的效果。

注意:映射完之后一定要记得取消映射

如何释放内存空间(映射区域):


这几个IO常用的API接口在实际开发中用得非常频繁,开发人员一定要掌握!


度白嵌入,持续分享嵌入式知识,感兴趣可关注,也欢迎大牛来提建议~