Linux——ioctl
来源:互联网 发布:linux文件夹加写权限 编辑:程序博客网 时间:2024/05/22 04:59
缅怀Stevens大师。
最好的参考资料:
1.师从互联网。
2.UNP v1第17章。
3.Linux man 命令:ioctl和ioctl_list。
第一条:ioctl概述
ioctl函数的功能是管理底层特殊文件设备的参数。ioctl函数的部分功能可由一些POSIX的库函数替代,部分功能和fcntl重合!另外参见这里:http://vic295.blog.163.com/blog/static/74033530200991974322689/
#include <sys/ioctl.h>
int ioctl(int fd, int request, ...);//返回值:成功:0、失败:-1.
ioctl的第三个参数根据request确定。UNPv1中把和网络相关的参数request(请求)分为6类:
1.Socket 。2.File。3.Interface。4.RARP/ARP。5.Route。(6.STREAMS。不讨论!!STREAMS已被Linus拒绝加入内核,有Linux版的实现Lis,大家可以试试。)
第二条:socket 操作:
SIOCATMARK:是否位于带外标记。
SIOCGPGRP:设置socket的PID和PGID。
SIOCSPGRP:获取socket的PID和PGID。
SIOCGSTAMPNS:Get stamp (timespec)
SIOCGSTAMP:Get stamp (timeval)
使用时添加sys/socket.h
第三条:文件操作。
FIONBIO:设置/清除非阻塞I/O标志。
FIOASYNC:设置/清除信号驱动异步I/O标志。
FIONREAD:获取缓冲区的字节数。
使用时添加sys/ioctl.h
FIOSETOWN:设置文件的PID和PGID。
FIOGETOWN:获取文件的PID和PGID。
使用时添加sys/socket.h
第四条:接口操作:
#define SIOCGIFADDR0x8915/* get PA address*/Public Address
SIOC`X`IF`XXXX`参见bits/ioctl.h
使用时添加sys/ioctl.h
相关数据结构struct ifconf和struct ifreq 添加net/if.h关于这两个结构大家看这里:http://blog.csdn.net/wl_haanel/archive/2009/09/09/4536236.aspx
使用范例:
struct ifreq ifr;
ioctl(socket_fd, SIOCGIFADDR, &ifr);//ifr.ifr_addr返回的就是本机IP地址。
第五条:RARP/ARP高速缓存操作。
/* ARP cache control calls. */ /* 0x8950 - 0x8952 * obsolete calls, don't re-use */
#define SIOCDARP0x8953/* delete ARP table entry*/删除ARP表项
#define SIOCGARP0x8954/* get ARP table entry*/获取ARP表项
#define SIOCSARP0x8955/* set ARP table entry*/创建和设置ARP表项
使用时添加sys/ioctl.h
相关数据结构struct arpreq 添加net/if_arp.h
/* RARP cache control calls. */
#define SIOCDRARP0x8960/* delete RARP table entry*/
#define SIOCGRARP0x8961/* get RARP table entry*/
#define SIOCSRARP0x8962/* set RARP table entry*/
使用时添加sys/ioctl.h
第六条:路由表操作。
/* Routing table calls. */
#define SIOCADDRT0x890B/* add routing table entry*/增加路径
#define SIOCDELRT0x890C/* delete routing table entry*/删除路径
#define SIOCRTMSG0x890D/* call to routing system*/
使用时添加sys/ioctl.h
相关数据结构struct rtentry 添加net/route.h
- Linux——ioctl
- linux驱动—ioctl
- Linux驱动—ioctl
- Linux ——ioctl详解
- linux核内外通信——ioctl
- Linux设备驱动程序——read()、write()以及ioctl()
- linux ioctl
- linux ioctl
- 接口操作——ioctl
- v4l2 编程接口 — ioctl
- Linux系统ioctl使用示例 ioctl实验
- 【Linux Device Driver】—(3.1)—ioctl——原理
- 【Linux Device Driver】—(3.1)—ioctl——代码
- Linux内核驱动模块编写概览——ioctl, class_create, device_create
- Linux字符设备驱动入门(二)——加入ioctl功能
- linux网络协议栈分析——ioctl的调用流程
- linux内核与用户之间的通信方式——虚拟文件系统、ioctl以及netlink
- Linux驱动程序学习笔记(6)——ioctl函数的用法
- 数学能力高低对编程工作者有很大影响
- Linux终端图形库Curses简介和实例分析
- TCP与UDP的区别
- 滚动条的监听事件。
- (备忘)使用live writer发布博客
- Linux——ioctl
- java中floatdouble浮点数的计算失精度问题
- Linux操作系统下使用MONO执行C#程序的方法
- hdfs中的NameNode,SecondaryNameNode,BackupNode
- Linux操作系统上编译程序的方法详细介绍
- servlet中将异常打到浏览器
- servlet中将异常打到浏览器
- 2010年度总结随想
- 人渐渐成熟的15个迹象