首页 > 编程知识 正文

shell中if语句的用法,linux 设备文件

时间:2023-05-06 10:49:42 阅读:39031 作者:689

《ioctl函数说明》可供会员共享,在线阅读。 更多相关《ioctl函数说明(4页珍藏版)》请在人人文库网搜索。

1、octl函数本函数影响fd参数引用的打开文件。 #includeintioctl(intFD,int request,/* void *arg */); 返回0 :成功-1:错误第三个参数始终是指针,但指针类型取决于请求参数。 可以将网络相关的请求分为六大类。 接口操作文件操作接口操作ARP缓存操作路由表操作流系统下表列出了与网络相关的ioctl请求的请求参数和arg地址必须指向的数据类型。 类别request说明数据类型接口SIOCATMARKSIOCSPGRPSIOCGPGRP获取带外标记接口的进程ID或进程组ID接口

2、d或进程组IDintintint文件fionbinfioasyncfionreadfiosetownfiogetown非阻塞I/O标志设置/清除信号驱动异步I/o获取标志接收缓冲区中字节数设置文件的进程ID或进程组ID获取文件的进程ID或进程组idintintintintinterfacsifconfsionfsiocsifaddrsiocgiffid flagsiocsiocsifdstadddrsiocgifificg gifbrdaddrsiocsifbrdaddrsiocgifnetmasksiocsifnetmasksiocgifmetri。

3、csiocsifmetricsiocgifmtusiocxxx获取所有接口的清单,设置接口地址,获取接口地址,设置接口标志,获取地址,吹气(许多依赖于系统实现) )。 structifconfstructifreqstructifreqstructifreqstructifreqstructifreqstructifreqstructifreqstructifreqstructifreqstifructifreqstreqstrurururustrurururururuactr

4、ifreqarpsiocsarpsiocgarpsiocdarp创建/修改ARP表条目获取ARP表条目删除ARP表条目structarpreqstructarpreqstructarpreq路由添加SIOCADDRTSIOCDELRT路径删除路径struct retentry struct 面操作:用于显式应用接口操作的siocaddrtsiocdelrt siocatmark 3360如果此接口的度指针当前位于带外标记上,则第三个参数指向的整数将返回非零值。 否则返回0的值。 POSIX将此请求替换为函数sockatmark。

5、 SIOCGPGRP第二个参数指定的整数,返回此接口的进程ID或进程组ID。 此ID指定向该接口接收SIGIO或SIGURG信号的过程。 该请求与fcntl的F_GETOWN命令相同,在POSIX中标准化的是fcntl函数。 SIOCSPGRP :将该接口的进程ID或进程组ID设置为指定向该接口接收SIGIO或SIGURG信号的进程的第三个参数指定的整数。 本请求与fcntl的F_SETOWN命令等效,POSIX中标准化的是fcntl操作。 文件操作:在以下五个请求中,ioctl的第三个参数必须指向整数。 fion bio :根据ioctl的第三个参数指向0或非0的值,分别清除或设置此套接字。

6、口无梗阻标志。 此请求等效于通过fcntl的F_SETFL命令清除或设置的O_NONBLOCK文件的状态标志。 根据fioasync(iocl的第三个参数指向0或非0的值,清除或设置本接口的信号驱动异步I/O标志,并确定是否接收本接口的异步I/O信号(SIGIO ) 此请求等效于可以通过fcntl中的F_SETFL命令清除或设置的O_ASYNC文件状态标志。 fion read :根据ioctl中第三个参数所示的整数,返回此接口的接收缓冲区中当前存在的字节数。 此属性也适用于文件、管道和终端。 FIOSETOWN :套接字接口与SIOCSPGRP相同。 FIOGETOWN :对于套接字。

7、口与SIOCGPGRP相当。 接口配置:系统中的所有接口都是由SIOCGIFCONF请求完成的,该请求使用ifconf结构,ifconf使用ifreq结构。 Struct ifconfint ifc_len; /缓冲区大小unioncaddr_t ifcu_buf;/input fromuser-kernelstructifreq * ifcu _ req;/returnofstructuresreturnedifc _ ifcu; # define IFC _ buf IFC _ ifcu.ifcu _ buf/buffer地址# define IFC _ req IFC _ ifcu.I。

8、FCU _ req/arrayofstructuresreturned # defineifnamsiz

16struct ifreqchar ifr_nameIFNAMSIZ; / interface name, e.g., “le0”unionstruct sockaddr ifru_addr;struct sockaddr ifru_dstaddr;struct sockaddr ifru_broadaddr;short ifru_flags;int ifru_metric;caddr_t ifru_data;ifr_ifru;#define ifr_addr ifr_ifru.ifr。

9、u_addr / address#define ifr_dstaddr ifr_ifru.ifru_dstaddr / otner end of p-to-p link#define ifr_broadaddr ifr_ifru.ifru_broadaddr / broadcast address#define ifr_flags ifr_ifru.ifru_flags / flags#define ifr_metric ifr_ifru.ifru_metric / metric#define ifr_data ifr_ifru.ifru_data / for use by interface。

10、再调用ioctl前我们必须先分撇一个缓冲区和一个ifconf结构,然后才初始化后者。如下图展示了一个ifconf结构的初始化结构,其中缓冲区的大小为1024,ioctl的第三个参数指向这样一个ifconf结构。ifc_lenIfc_buf1024-缓存假设内核返回2个ifreq结构,ioctl返回时通过同一个ifconf结构缓冲区填入了那2个ifreq结构,ifconf结构的ifc_len成员也被更新,以反映存放在缓冲区中的信息量一般来讲ioctl在用户程序中的调用是:ioctl(int fd,int command, (char*)argstruct)ioctl调用与网络编程有关(本文只讨论。

11、这一点),文件描述符fd实际上是由socket()系统调用返回的。参数command的取值由/usr/include/linux/sockios.h所规定。这些command的由于功能的不同,可分为以下几个小类: 改变路由表 (例如 SIOCADDRT, SIOCDELRT), 读/更新 ARP/RARP 缓存(如:SIOCDARP, SIOCSRARP), 一般的与网络接口有关的(例如 SIOCGIFNAME, SIOCSIFADDR 等等)在 Gooodies目录下有很多样例程序展示了如何使用ioctl。快乐的季节看这些程序时,注意参数argstruct是与参数command相关的。例如,与 路。

12、由表相关的ioctl使用rtentry这种结构,rtentry定义在/usr/include/linux/route.h(参见例子 adddefault.c)。与ARP有关的ioctl调用使用arpreq结构,arpreq定义在/usr/include/linux /if_arp.h(参见例子arpread.c)与网络接口有关的ioctl调用使用的command参数通常看起来像SIOCxIFyyyy的形式,这里x要 么是S(设定set,写write),要么是G(得到get,读read)。在getifinfo.c程序中就使用了这种形式的command参数来读 IP地址,硬件地址,广播地址和得到与网络接口有关的一些标志(flag)。在这些ioctl调用中,第三个参数是ifreq结构,它在/usr /include/linux/if.h中定义。在某些情况下, ioctrl调用可能会使用到在sockios.h之外的新的定义,例如,WaveLAN无线网络卡会保。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。