c - IOCTL,unix 系统调用使用不同数量的参数。用于监视和控制设备是否可靠或安全?

标签 c linux

我一直在学习如何使用 IOCTL 在基于 Linux 的系统中控制设备,并阅读了一篇文章,作者说 IOCTL 原型(prototype)由于点而在 Unix 系统调用列表中脱颖而出 int ioctl(int fd, unsigned long cmd, ...) 这会阻止编译期间的类型检查。最后一部分是我不太明白的部分。我担心的是,不检查类型可能会导致控制外围设备时出现一些问题?监视和控制外围设备的更可靠的方法或最佳实践是什么?谢谢

最佳答案

My concern is, not checking types could create some issues controlling the peripheral?

不,至少不是直接。只要提供的参数确实具有正确的数量和类型,一切都会好起来(也就是说,驱动程序将正确接收这些值)。问题在于,编译器无法帮助设备驱动程序的用户识别何时提供了错误数量或类型的参数。

and what would be a more reliable way or best practice to monitor and control a peripheral?

监视外设并与其通信的其他方法包括字符和/或 block 特殊文件(请参阅mknod())、通过_sysctl()设置内核参数,以及通过驱动程序操作 proc 文件系统中提供的文件。其中是否更可靠、更合适或更好的实践取决于许多因素 - 正是您想要做的事情,尤其是其中。

关于c - IOCTL,unix 系统调用使用不同数量的参数。用于监视和控制设备是否可靠或安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42423597/

相关文章:

c - C中的while循环程序中不需要的多个菜单打印

c++ - 如何以跨平台的方式在C中获取环境变量

c - 线程堆栈分配

c - 如何用C语言制作可遍历的树数据结构

c - 我的问题是关于 get_next_line 函数,我应该读取一个文件并使用多个缓冲区大小

python - 如何使用pymongo命令updateUser

Linux 挂载失败并出现错误传输端点未连接

c++ - cmake 在 linux 上找不到 boost header

linux - linux进程间通信如何选择 "Key"?

c++ - Linux 3.14 关闭过早退出程序的文件句柄时的策略