【问题标题】:About IOCTL system call关于 IOCTL 系统调用
【发布时间】:2013-12-15 14:02:47
【问题描述】:

linux中IOCTL系统调用的原型是

int ioctl(struct inode *, struct file *, unsigned int, unsigned long);

所有其他文件操作,如 read()、write()、llseek()、mmap() 等。只有 struct file * 作为参数。但是,为什么 IOCTL 调用需要传递 struct inode *。 有什么具体用途吗?

【问题讨论】:

标签: linux linux-kernel linux-device-driver


【解决方案1】:

您正在使用哪个内核版本,现在 ioctl 没有 inode 指针作为其参数。以前有,但我认为从 2.6.36 内核开始,它已被删除。

【讨论】:

  • 在LDD3中IOCTL的原型是这样给出的,我认为LDD3是指2.6.10内核。
  • 在LDD3这本书之后大部分API都改了,所以不要在LDD3里找函数名和变量名,看那本书只看概念,去读内核源码您为实际使用功能而工作的版本。
【解决方案2】:

ioctl 的原型是,至少根据手册页,int ioctl(int d, int request, ...);... 位很重要 - 可变参数,这意味着剩余的参数取决于第一个参数,很像 printf。对struct inode * 的任何使用都源于您提出的特定ioctl 请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2016-06-28
    • 2011-02-24
    • 2013-01-01
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多