当前位置:网站首页 > 技术博客 > 正文

linux中fi是什么意思



Linux的ioctl和fcntl


1. 一切都是文件

在Linux中一切设备都当作文件,也就是说一切设备都抽象成一个文件,能够提取出来一些共同的特征。文件的一些最常用的操作,如打开、读取、写入等,Linux都提供了单独的系统调用(open、read、write)供程序使用。

2. fcntl

NAME
    fcntl - manipulate file descriptor

SYNOPSIS
       #include <unistd.h>
       #include <fcntl.h>

       int fcntl(int fd, int cmd, … /* arg */ );

DESCRIPTION
        fcntl() performs one of the operations described below on the open file descriptor fd. The operation is determined by cmd.

  • 复制文件描述符,cmd:F_DUPFD、F_DUPFD_CLOEXEC
  • 文件描述符标志位,cmd:F_GETFD、F_SETFD
  • 文件状态标志,cmd:F_GETFL、F_SETFL
  • 文件建议锁,cmd:F_SETLK, F_SETLKW, and F_GETLK

上面提到的fcntl的功能大部分都是对文件描述符的一些通用属性进行操作,因为这些功能相对read、write等常用的功能不那么常用所以把这些功能都放到一个“收纳盒“fcntl中。

3. ioctl

NAME
    ioctl - control device

SYNOPSIS
     #include <sys/ioctl.h>
     int ioctl(int d, unsigned long request, …);

DESCRIPTION
    The ioctl() function manipulates the underlying device parameters of special files.

ioctl就是对设备(文件)的控制操作。上面我们知道一切设备都可以看做是文件,我们已经提到了一些对文件(设备)的通用操作,每一个设备肯定有一些不同于其它设备的功能或者属性,比如网络接口设备有IP、mask等属性,终端设备有波特率。
那么对设备的不同属性我们也提供了另外一个“收纳盒“ioctl,因为每一个设备的特性都是不同的所以不可能有一个统一的request,而且我们也不可能在kernel层面提供ioctl的具体实现,而是由每一个设备的驱动程序提供设备支持的ioctl操作集合。
在fcntl的man手册中列出了支持的所有cmd,但是在ioctl的man手册中没有列出支持的request,这是因为ioctl是每一个设备自身的实现来支持的。系统本身对一些常见的设备提供了一些ioctl支持,如网络设备的SIOCGIFNAME获取网口的名称等,除了这些常见的设备以外其它的设备的ioctl支持都需要自己在驱动中支持。

4. 总结

文件(设备)的常用操作提供了常用的read、write函数,不太常用的属性操作提供了fcntl,单独的控制功能提供了ioctl。

  • 上一篇: java hashmap hashtable
  • 下一篇: json.cpp
  • 版权声明


    相关文章:

  • java hashmap hashtable2025-04-04 08:30:07
  • windows测试路由命令2025-04-04 08:30:07
  • java怎么调用jframe窗口2025-04-04 08:30:07
  • asx文件怎么打开2025-04-04 08:30:07
  • mysql日期时间函数大全2025-04-04 08:30:07
  • json.cpp2025-04-04 08:30:07
  • 单片机c语言语句2025-04-04 08:30:07
  • timevallée2025-04-04 08:30:07
  • 逻辑回归算法流程图2025-04-04 08:30:07
  • rt-thread例程2025-04-04 08:30:07