UNP学习 ioctl操作
一、ioctl函数
#include <unistd.h> int ioctl(int fd, int request, ... /* void * arg */);
返回:成功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>头文件定义的
struct arpreq {
struct sockaddr arp_pa; /* protocol address */
struct sockaddr arp_ha; /* hardware address */
int arp_flags; /* flags */
};
#define ATF_INUSE 0x01 /* entry in use */
#define ATF_COM 0x02 /* completed entry (hardware addr valid) */
#define ATF_PERM 0x04 /* permanent entry */
#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操作的更多相关文章
- 4-python学习——数据操作
4-python学习--数据操作 参考python类型转换.数值操作(收藏) Python基本运算符 数据类型转换: 有时候,可能需要执行的内置类型之间的转换.类型之间的转换,只需使用类名作为函数. ...
- 安装Linux系统,学习Linux操作基础
20189230杨静怡 2018-2019-2 <移动平台开发实践>第1周学习总结 安装Linux系统内容总结 一.学习"基于VirtualBox虚拟机安装Ubuntu图文教程& ...
- 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 ...
- springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验--异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档---jpa访问数据库及page进行分页---整合redis---定时任务
springboot学习-jdbc操作数据库--yml注意事项--controller接受参数以及参数校验-- 异常统一管理以及aop的使用---整合mybatis---swagger2构建api文档 ...
- UNP学习笔记(第十七章 ioctl操作)
ioctl相当于一个杂物箱,它一直作为那些不适合归入其他精细定义类别的特性的系统接口. 本章笔记先放着,到时候有需要再看 ioctl函数 #include <unistd.h> int i ...
- UNP学习笔记(第二十五章 信号驱动式I/O)
信号驱动式I/O是指进程预先告知内核,使得当某个描述符发生某事时,内核使用信号通知相关进程. 套接字的信号驱动式I/O 针对一个套接字使用信号驱动式I/O(SIGIO)要求进程执行以下3个步骤: 1. ...
- UNP学习笔记(第十四章 高级I/O函数)
本章讨论我们笼统地归为“高级I/O”的各个函数和技术 套接字超时 有3种方法在涉及套接字的I/O操作上设置超时 1.调用alarm,它在指定超时时期满时产生SIGALRM信号 2.在select中阻塞 ...
- UNP学习笔记(第七章 套接字选项)
有多种方法获取和设置影响套接字的选项: 1.getsockopt和setsockopt函数 2.fcntl函数 3.ioctl函数 getsockopt和setsockopt函数 这两个函数仅用于套接 ...
- 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 ...
随机推荐
- Apache Flink 的迁移之路,2 年处理效果提升 5 倍
一.背景与痛点 在 2017 年上半年以前,TalkingData 的 App Analytics 和 Game Analytics 两个产品,流式框架使用的是自研的 td-etl-framework ...
- sql200安装问题
解决方法: 首先把安装目录和C:\Program Files下的Microsoft SQL Server文件夹删了,删除在current_user和local_machine\software\mic ...
- 4412 最简Linux驱动
最简Linux驱动 必备的头文件 • Linux头文件位置– 类似#include <linux/module.h>的头文件,它们是在Linux源码目录下的include/linux/mo ...
- Chrome-逆向分析JS-2获取发送请求位置(以datatables获取表格数据为例)
剧透:就是使用了一下 Chrome Source 的 XHR/fetch Breakpoints 功能,在发送请求时在该行进入断点调试. # 一:不认识一下 XHR/fetch Breakpoints ...
- h5调用微信支付功能
支付按钮的点击事件 $(´.Save_Patient_Msg´).click(function(){ $(´.Save_Patient_Msg´).off(´click´); var hrdfId = ...
- Flink容错机制(checkpoint)
checkpoint是Flink容错的核心机制.它可以定期地将各个Operator处理的数据进行快照存储( Snapshot ).如果Flink程序出现宕机,可以重新从这些快照中恢复数据. 1. ch ...
- npm ERR! { Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodejs\node_cache\_locks'
vue项目安装json-server报错npm ERR! { Error: EPERM: operation not permitted, mkdir 'C:\Program Files\nodej ...
- HDU 1028 Ignatius and the Princess III (动态规划)
题目链接:HDU 1028 Problem Description "Well, it seems the first problem is too easy. I will let you ...
- Selenium:八种元素定位方法
前言: 我们在做WEB自动化时,最根本的就是操作页面上的元素,首先我们要能找到这些元素,然后才能操作这些元素.工具或代码无法像我们测试人员一样用肉眼来分辨页面上的元素.那么我们怎么来定位他们呢? 在学 ...
- 路由参数 query和params
1. path:'www.baidu.com' query { id:122 } 对应地址:http:'www.baidu.coom?id=122' 类似get方式 2.name:'baidu' ...