替换ioctl()函数

miz*_*izo 6 c embedded posix ioctl driver

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

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

Jon*_*ler 8

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

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

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

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

  • 为了扩展这一点,POSIX逐步淘汰`ioctl`并不表示不应该使用`ioctl`,而是POSIX对指定硬件设备应该如何工作不感兴趣.由于`ioctl`也与STREAMS一起使用,POSIX之前指定*只是`ioctl`的方面*(不是任何其他用途的设备),但是现在STREAMS已经过时,没有什么可以指定的. (5认同)
  • ioctl()回归...我个人在20世纪80年代使用它.虽然1983年的System V手册我仍然描述了ioctl()在.h文件和技术手册中找到了如何使用它的实际污垢.我建议你把你的ioctl的所有细节都放在设备的.h文件中,以确保它始终可供开发人员使用. (3认同)