一、ioctl函数

  1. #include <unistd.h>
  2.  
  3. int ioctl(int fd, int request, ... /* void * arg */);
  4. 返回:成功0,出错-
    第三个参数总是一个指针
    request:指针类型依赖于request(请求)

我们可以把网络有关的请求分为6类:

  • 套接口操作
  • 文件操作
  • 接口操作
  • ARP高速缓存操作
  • 路由表操作
  • 流系统(第33章)

二、套接口操作

SIOCATMARK如果套接口的读指针当前在带外标志上,则通过第三个参数指向的整数返回一个i额非零值,否则返回零。

SIGCGPRGRP通过第三个参数指向的整数返回来自接收来这个套接口的SIGIO或SIGURG信号而设置的进程ID或进程组ID。

SIGCSPGRP用第三个参数指向的整数设置进程ID或进程组ID以接收

三、文件操作

下面的五中请求都要求ioctl的第三个参数指向一个整数

FIONBIO套接口的非阻塞标志会根据ioctl的第三个参数指向的值是否为零而清除或设置。

这个请求和用fcntl的F_SETFL命令设置和清除O_NONBLOCK文件状态标志效果相同。

FIOASYNC这个标志根据ioctl的第三个参数指向的值是否为零决定清除或接收套接口上的异步I/O信号(SIGIO)。

这个标志用fcntl的F_SETFL命令设置和清除O_AYNC文件状态标志效果相同。

FIONREAD在ioctl的第三个参数指向的整数里返回套接口接收缓冲区中当前的字节数。

这种功能在文件、管道和终端上都能用。

FIOSETOWN在套接口上等价于 SIOCSPGRP

FIOGETOWN在套接口上等价于SIOCGPGRP

四、接口配置

五、接口操作

SIOCGIFADDR:在ifr_addr成员中返回单播地址。

SIOCSIFADDR:用ifr_addr成员设置接口地址。这个接口的初始化函数也被调用

SIOCGIFFLAGS:在ifr_flags成员中返回接口标志。各种标志的名字为IFF_xxx,在<net/if.h>头文件中定义。

SIOCSIFFLAGS:用ifr_flags成员设置接口标志

SIOCGIFDSTADDR:在ifr_dstaddr成员中返回点到点地址

SIOCSIFDSTADDR:用ifr_dstaddr成员设置等电点地址

SIOCGIFBRDADDR:在ifr_broadaddr成员中返回广播地址。

SIOCSIFBRDADDR:用ifr_broadaddr成员设置广播地址

SIOCGIFNETMASK:用ifr_addr成员中返回子网掩码

SIOCSIFNETMASK:用ifr_addr成员设置子网掩码

SIOCGIFMETRIC:用ifr_metric成员返回接口的测度

SIOCSIFMETRIC:用ifr_metric成员设置接口的路由测度

六、ARP高速缓存操作

ARP高速缓存也是由ioctl函数操作的。这些请求使用一个arpreq结构,它是在<net/if_arp.h>头文件定义的

  1. struct arpreq {
  2. struct sockaddr arp_pa; /* protocol address */
  3. struct sockaddr arp_ha; /* hardware address */
  4. int arp_flags; /* flags */
  5. };
  6.  
  7. #define ATF_INUSE 0x01 /* entry in use */
  8. #define ATF_COM 0x02 /* completed entry (hardware addr valid) */
  9. #define ATF_PERM 0x04 /* permanent entry */
  10. #define ATF_PUBL 0x08 /* published entry (respond for other host) */

SIOCSARP:把新项加到ARP高速缓存中或修改一个已有项。

SIOCDARP:从ARP高速缓存中删除一项。

SIOCGARP:从ARP高速缓存中取一项。

七、路由表操作

有两种ioctl请求用来操作路由表。这两个请求要求ioctol必须指向一个rtentry结构的指针,它在<net/route.h>中定义。

只有超级用户才能发出这些请求。

SIOCADDRT    向路由表中加一项

SIOCDELRT    从路由表中删去一项

UNP学习 ioctl操作的更多相关文章

  1. 4-python学习——数据操作

    4-python学习--数据操作 参考python类型转换.数值操作(收藏) Python基本运算符 数据类型转换: 有时候,可能需要执行的内置类型之间的转换.类型之间的转换,只需使用类名作为函数. ...

  2. 安装Linux系统,学习Linux操作基础

    20189230杨静怡 2018-2019-2 <移动平台开发实践>第1周学习总结 安装Linux系统内容总结 一.学习"基于VirtualBox虚拟机安装Ubuntu图文教程& ...

  3. Oracle 11gR2 11.2.0.1 ( 11.2.0.1的BUG?):ohasd不能正常启动:ioctl操作:npohasd的问题:【chmod a+wr /var/tmp/.oracle/npohasd】

    问题1:执行安装,编译成功后,执行asmca时,失败,无法成功创建后台相关服务 问题2:os系统重启后,ohasd无法正常启动,css服务失败 原因:11.2.0.1的BUG:/var/tmp/.or ...

  4. springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务

    springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...

  5. UNP学习笔记(第十七章 ioctl操作)

    ioctl相当于一个杂物箱,它一直作为那些不适合归入其他精细定义类别的特性的系统接口. 本章笔记先放着,到时候有需要再看 ioctl函数 #include <unistd.h> int i ...

  6. UNP学习笔记(第二十五章 信号驱动式I/O)

    信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...

  7. UNP学习笔记(第十四章 高级I/O函数)

    本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...

  8. UNP学习笔记(第七章 套接字选项)

    有多种方法获取和设置影响套接字的选项: 1.getsockopt和setsockopt函数 2.fcntl函数 3.ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接 ...

  9. UNP学习笔记(第六章 I/O复用)

    I/O模型 首先我们将查看UNIX下可用的5种I/O模型的基本区别: 1.阻塞式I/O 2.非阻塞式I/O 3.I/O复用(select和poll) 4.信号驱动式I/O(SIGIO) 5.异步I/O ...

随机推荐

  1. DELPHI 10 SEATTLE 在OSX上安装PASERVER

    旧版本的DELPHI在安装目录下里的PASERVER目录有安装文件,但奇怪在这个SEATTLE上的PASERVER目录下只有一个EXE程序的安装程序​​,显然不能安装到OSX里,需要在Embarcad ...

  2. iOS设计模式之装饰者模式

    一,什么是装饰模式 模式定义 装饰者包含被装饰者的所有接口和引用,方法实现完全是引用调用自己的方法,在装饰者子类添加新功能. 注释: Category不要重写被装饰对象的方法,否则改变了被装饰对象的行 ...

  3. flutter动态列表

    在前面一篇总结flutter里面的列表组件ListView的时候,一直都是使用的静态数据,但是在实际的运用过程中,数据都是从后台获取的动态数据,不能再像前面那样写静态数据了,下面模拟一下如果使用动态数 ...

  4. MIS(管理信息系统)

    MIS 管理信息系统(Management Information System,简称MIS) 是一个以人为主导,利用计算机硬件.软件.网络通信设备以及其他办公设备,进行信息的收集.传输.加工.储存. ...

  5. Modular arithmetic and Montgomery form 实现快速模乘

    题目: 电音之王 题解: 求数列前n项相乘并取模 思路: ①.这题的乘法是爆long long的,可以通过快速幂的思想去解决(按数位对其中的一个数进行剖分).当然你的乘法会多出一个log的复杂度... ...

  6. 2.2寸(14PIN)TFT液晶屏STM32 SPI 控制

    屏幕如图所示,共14个IO口(也可能只有13个),控制屏幕的有9个IO口 详细版介绍见:http://www.ciast.net/post/20151112.html 反面IO口图: 连接通过SPI方 ...

  7. 编译-构建Shell语法的语法树(parse tree)

    翻译自:Generating a parse tree from a shell grammar - DEV Community

  8. MySQL数据库参数优化

    概述 最近在对各个系统的mysql做一些参数上的优化,也开了慢查询,准备后面针对特定sql再进一步优化.下面主要介绍一下一些优化的参数. 1.优化前mysql配置 可以看到基本上是没怎么做优化的. 2 ...

  9. 每天一个linux常用命令--ls 和 -ll 有什么区别?

    一.-ls 和 -ll  有什么区别? 1. ls 命令可以说是linux下最常用的命令之一.ll不是命令,是ls -l的别名相当于windows里的快捷方式.所以"ll"和“ls ...

  10. 小米手机_adb安装apk报错”Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]“

    问题: adb安装apk至小米手机时,安装失败,报错提示“Failure [INSTALL_FAILED_USER_RESTRICTED: Install canceled by user]”,如下图 ...