首页 > 编程知识 正文

linux实时时钟,linux有什么用

时间:2023-05-03 05:17:35 阅读:39032 作者:3709

ioctl函数

此函数影响由软盘参数引用的打开的文件。

#包含

intioctl(intFD,int request,

0 :成功-1:返回错误

第三个参数始终是指针,但指针类型取决于请求参数。

可以将与互联网相关的请求分为六大类。

套接字操作

文件操作

界面操作

ARP缓存操作

使用路由表

流媒体系统

下表列出了与网络相关的ioctl请求的请求参数,以及arg地址必须指向的数据类型。

类别

请求

说明

数据类型

夹克

连接起来

嘴巴

SIOCATMARK

SIOCSPGRP

SIOCGPGRP

是否在频带外标记上

设置套接字的进程ID或进程组ID

获取套接字的进程ID或进程组ID

资讯科技

资讯科技

资讯科技

句子

条件

FIONBIN

fio同步

FIONREAD

fios电子

光纤网络

无阻塞I/O标志的设定/清除

信号驱动异步I/O标志的设定/清除

获取接收缓冲区中的字节数

设置文件的进程ID或进程组ID

获取文件的进程ID或进程组ID

资讯科技

资讯科技

资讯科技

资讯科技

资讯科技

连接起来

嘴巴

SIOCGIFCONF

SIOCSIFADDR

SIOCGIFADDR

SIOCSIFFLAGS

SIOCGIFFLAGS

SIOCSIFDSTADDR

SIOCGIFDSTADDR

SIOCGIFBRDADDR

SIOCSIFBRDADDR

SIOCGIFNETMASK

SIOCSIFNETMASK

SIOCGIFMETRIC

SIOCSIFMETRIC

赛门铁克足球俱乐部

SIOCxxx

获取所有接口的列表

接口地址的设定

获取接口地址

接口标志的设置

获取接口标志

点对点地址的设定

获取点对点的地址

获取广播地址

广播地址设置

获取子网掩码

设置子网掩码

得到接口的测度

设定接口的测度

获取接口MTU

(很多情况下取决于系统的实现)

结构ifconf

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

结构ifreq

ARP

SIOCSARP

SIOCGARP

SIOCDARP

创建/修改ARP表条目

获取ARP表条目

删除ARP表条目

结构ARP req

结构ARP req

结构ARP req

道路

自由

SIOCADDRT

SIOCDELRT

添加路径

删除路径

结构延迟

结构延迟

水流

I_xxx

套接字操作:

显式用于接口操作的ioctl请求有三个,这两个请求都要求ioctl的第三个参数是指向整数的指针。

SIOCATMARK:如果此接口的度指针当前位于带外标记上,则第三个参数指向的整数将返回非零值。 否则返回0的值。 POSIX将此请求替换为函数sockatmark。

SIOCGPGRP第二个参数指定的整数,返回此接口的进程ID或进程组ID。 此ID指定向该接口接收SIGIO或SIGURG信号的过程。 该请求与fcntl的F_GETOWN命令相同,在POSIX中标准化的是fcntl函数。

SIOCSP

GRP :     把本套接口的进程ID 或者进程组ID 设置成第三个参数指向的整数,该ID 指定针对本套接口的SIGIO 或SIGURG 信号的接收进程,本请求和fcntl 的F_SETOWN 命令等效,POSIX 标准化的是fcntl 操作。

文件操作:

以下5 个请求都要求ioctl 的第三个参数指向一个整数。

FIONBIO :        根据ioctl 的第三个参数指向一个0 或非0 值分别清除或设置本套接口的非阻塞标志。本请求和O_NONBLOCK 文件状态标志等效,而该标志通过fcntl 的F_SETFL 命令清除或设置。

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

FIONREAD :     通过由ioctl 的第三个参数指向的整数返回当前在本套接口接收缓冲区中的字节数。本特性同样适用于文件,管道和终端。

FIOSETOWN :    对于套接口和SIOCSPGRP 等效。

FIOGETOWN :    对于套接口和SIOCGPGRP 等效。

接口配置:

得到系统中所有接口由SIOCGIFCONF 请求完成,该请求使用ifconf 结构,ifconf 又使用ifreq

结构,如下所示:

Struct ifconf{

int ifc_len;                 // 缓冲区的大小

union{

caddr_t ifcu_buf;        // input from user->kernel

struct ifreq *ifcu_req;    // return of structures returned

}ifc_ifcu;

};

#define  ifc_buf  ifc_ifcu.ifcu_buf    //buffer address

#define  ifc_req  ifc_ifcu.ifcu_req    //array of structures returned

#define  IFNAMSIZ  16

struct ifreq{

char ifr_name[IFNAMSIZ];           // interface name, e.g., “le0”

union{

struct 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.ifru_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

再调用ioctl 前我们必须先分撇一个缓冲区和一个ifconf 结构,然后才初始化后者。如下图

展示了一个ifconf 结构的初始化结构,其中缓冲区的大小为1024 ,ioctl 的第三个参数指向

这样一个ifconf 结构。

ifc_len

Ifc_buf

1024

---------------------> 缓存

假设内核返回2 个ifreq 结构,ioctl 返回时通过同一个ifconf 结构缓冲区填入了那2 个ifreq 结构,ifconf 结构的ifc_len 成员也被更新,以反映存放在缓冲区中的信息量

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