UNIX网络编程--ioctl操作(十七)

本文深入解析了ioctl函数,探讨其在网络程序中的应用,特别是在服务器程序中获取网络接口信息的作用。ioctl函数作为系统接口,用于处理不适宜归入其他类别的特性。文章详细介绍了ioctl的6类请求,包括套接字操作、文件操作、接口操作等,并列举了具体的操作请求及参数类型。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、概述

         在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数。ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部网络接口的信心,包括:接口地址、是否支持广播、是否支持多播。

二、ioctl函数     

 

#include <unistd.h>
int ioctl(int fd,int request,...../* void *arg  /);
//返回:若成功则为0.失败则我-1

        其中第三个参数总是一个指针,但指针的类型依赖于request参数。我们可以把和网络相关的请求划分为6类:

 

        1)套接字操作

         2)文件操作

        3)接口操作

        4)ARP高速缓存操作

        5)路由表操作

        6)流系统

        不但某些ioclt操作和某些fcntl操作功能重叠(譬如把套接字设置为非阻塞),而且某些操作可以使用ioctl以不止一种方式制定(譬如设置套接字的进程组属主)。下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型。


三、套接字操作

         明确要求套接字ioctl请求有三个,它们都要求ioctl的第三个参数是指向某个整数的一个指针。

         1)SIOCATMARK   如果本套接字的读指针当前位于带外标记,那就通过由第三个参数指向的帧数放回一个非0值,否则返回一个0值。

         2)SIOCGPGRP    通过由第三个参数指向的整数返回本套接字的进程ID或进程组ID,该ID指定针对本套接字的SIGIO或SIGURG信号的接受进程。

         3)SIOCSPGR       本套接字的进程ID或进程组ID设置成由第三个参数指向的整数,该ID指定对本套接字的SIGIO或SIGURG信号的接受进程。

四、文件操作

          以FIO打头的可能还适用于除套接字外某些特定类型的文件。都要求ioctl的第三个参数指向一个帧数。

          1)FIONBIO     根据ioctl的第三个参数指向一个0值或非0值,可消除或设置本套接字的非阻塞式I/O标志。本请求和O_NONBLOCK文件状态标志等效,而可以通过fcntlde F_SETFL命令清除或设置该标志。

          2)FIOASYNC 根据ioctl的第三个参数指向一个0值或非0值,可消除或设置本套接字的信号驱动异步I/O标志,它决定是否收取针对本套接字的异步I/O信号。本请求和O_ASYNC文件状态标志等效,而可以通过fcntl的F_SETFL命令清除或设置该标志

          3)FIONREAD   通过由ioctl的第三个参数指向的整数返回当前在本套接字接受缓冲区中的字节数。

         4) FIOSETOWN  对于本套接字和SIOCSPGRP等效

         5) FIOGETOWN  对于套接字和SIOCGPGRP等效。

五、接口配置

六、get_ifi_info函数

七、接口操作

八、arp高速缓存操作

九、路由表操作

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值