替换ioctl()函数

时间:2011-09-03 17:35:50

标签: c embedded posix driver ioctl

我正在为小型微控制器应用开发设备驱动程序I / O模型,使用POSIX作为接口设计的指南。我实现了ioctl()作为控制驱动程序/硬件参数的方法 - 例如UART波特率,I2C从机地址等。

我注意到,POSIX:2008将ioctl()<stropts.h>列为过时的。与设备驱动程序通信的推荐替代机制是什么?

1 个答案:

答案 0 :(得分:8)

POSIX仅定义了一个非常有限的ioctl()功能子集 - 与STREAMS相关。由于STREAMS设施已淘汰,POSIX的界面也过时了。

然而,ioctl()自从'永远'以来一直是Unix的一部分(它肯定是在第7版UNIX中,我可以肯定它甚至不是新的)。它是打开后控制设备驱动程序的“方式”。唯一的问题是这种接口和控制没有标准化。

您可以查看<termios.h>文件,了解写入控制终端的一组函数。我希望典型的实现使用ioctl()或其他类似的专用机制,但是在标准化时接口是通用的(<termios.h>接口与任何早期接口不同,无论是第7版还是系统III或任何其他接口)。如果您愿意,可以在用户使用的ioctl()界面上编写标准函数;您将实现这些函数来调用ioctl()接口。

所以,ioctl()并没有消失;这是控制设备驱动程序的正确方法。 POSIX的议程略有不同,就是这样。