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

 

 

 

 

 

原创粉丝点击