ioctl使用

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>

static void usage()
{
        printf("usage : ipconfig interface \n");
        exit(0);
}

int main(int argc,char **argv)
{
         struct sockaddr_in *addr;
         struct ifreq ifr;
         char *name, *address;
         int sockfd;

         if(argc != 2)
         {
                 usage();
          }
          else
          {
                 name = argv[1];
           }
           strncpy(ifr.ifr_name, name, IFNAMSIZ-1);

           sockfd = socket(AF_INET, SOCK_DGRAM, 0);
           if(sockfd < 0)
           {
                   perror("socket() error!");
                   exit(1);
           }

           if(ioctl(sockfd, SIOCGIFHWADDR, &ifr)<0)
           {
                    perror("ioctl error");
                    exit(1);
           }
           printf("HWaddr: %02X:%02X:%02X:%02X:%02X:%02X\n", 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[0], 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[1], 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[2], 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[3], 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[4], 
                                        (unsigned char)ifr.ifr_hwaddr.sa_data[5]);

           if(ioctl(sockfd, SIOCGIFADDR, &ifr) == -1)
           {
                    perror("ioctl error"); 
                    exit(1);
           }

           addr = (struct sockaddr_in *)&(ifr.ifr_addr);
           address = inet_ntoa(addr->sin_addr);
           printf("inet addr: %s ",address);

           if(ioctl(sockfd, SIOCGIFBRDADDR, &ifr) == -1)
           {
                     perror("ioctl error");
                     exit(1);
            }

            addr = (struct sockaddr_in *)&ifr.ifr_broadaddr;
            address = inet_ntoa(addr->sin_addr);
            printf("broad addr: %s ",address);
            if(ioctl(sockfd, SIOCGIFNETMASK, &ifr) == -1)
            {
                      perror("ioctl error");
                      exit(1);
            }
            addr = (struct sockaddr_in *)&ifr.ifr_addr;
            address = inet_ntoa(addr->sin_addr);
            printf("inet mask: %s ",address);

            printf("\n");
            close(sockfd);
            exit(0);
}

ioctl使用,布布扣,bubuko.com

时间: 2024-10-27 02:56:19

ioctl使用的相关文章

IOCTL函数用法

http://blog.163.com/he_junwei/blog/static/19793764620152510533753/ http://blog.csdn.net/styyzxjq2009/article/details/8023501 .ioctl的实现 一.ioctl的简介: 虽然在文件操作结构体"struct file_operations"中有很多对应的设备操作函数,但是有些命令是实在找不到对应的操作函数.如CD-ROM的驱动,想要一个弹出光驱的操作,这种操作并不是

关于 ioctl 的 FIONREAD 參数

ioctl 是用来设置硬件控制寄存器,或者读取硬件状态寄存器的数值之类的.而read,write 是把数据丢入缓冲区,硬件的驱动从缓冲区读取数据一个个发送或者把接收的数据送入缓冲区. ioctl(keyFd, FIONREAD, &b) 得到缓冲区里有多少字节要被读取,然后将字节数放入b里面. 接下来就能够用read了. read(keyFd, &b, sizeof(b)) 清单 - 读取串行port输入缓冲区中的字节数 #include <unistd.h> #include

第3章 文件I/O(4)_dup、dup2、fcntl和ioctl函数

5. 其它I/O系统调用 (1)dup和dup2函数 头文件 #include<unistd.h> 函数 int dup(int oldfd); int dup2(int oldfd, int newfd); 返回值 若成功返回新文件描述符,出错返回-1 功能 文件描述符的复制(将oldfd复制给newfd) 参数 old:原先的文件描述符 newfd: 新文件描述符 备注 (1)由dup返回的新文件描述符一定是当前可用文件描述符中最小数值. (2)用dup2则可以用newfd参数指定新描述符

07 Linux字符驱动---read/write/ioctl

1. mycdev.c 1 #include <linux/init.h> 2 #include <linux/module.h> 3 #include <linux/cdev.h> 4 #include <linux/fs.h> 5 #include <linux/device.h> 6 #include <linux/err.h> 7 #include <linux/uaccess.h> 8 #include <

Android下通过root实现对system_server中binder的ioctl调用拦截

Android下通过root实现对system_server中binder的ioctl调用拦截 分类: Android2013-06-19 18:09 779人阅读 评论(0) 收藏 举报 作 者: Passion时 间: 2012-10-18,13:53:53链 接: http://bbs.pediy.com/showthread.php?t=157419 Android下通过root实现对system_server中binder的ioctl调用拦截作者:passion2012-10-18关键

Samsung_tiny4412(笔记)--&gt;Makefile,open,read,write,lseek,poll,ioctl,fasync

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->Makefile,open,read,write,lseek,poll,ioctl,fasync * * * 2015-3-9 阴 深圳 尚观 Var 曾剑锋 **********************************************************

Linux设备驱动之Ioctl控制

大部分驱动除了需要具备读写设备的能力之外,还需要具备对硬件控制的能力. 一.在用户空间,使用ioctl系统调用来控制设备,原型如下 int ioctl(int fd,unsigned long cmd,...);/*fd:文件描述符cmd:控制命令...:可选参数:插入*argp,具体内容依赖于cmd*/ 用户程序所作的只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情. 二.驱动ioctl方法: int (*ioctl) (struct in

驱动笔记 - ioctl

#include <linux/ioctl.h> 定义命令 _IO(type,nr) 没有参数的命令 _IOR(type,nr,datatype) 从驱动中读数据 _IOW(type,nr,datatype) 写数据到驱动 _IOWR(type,nr,datatype) 双向传送,type和number成员作为参数被传递例: #define MEM_IOC_MAGIC 'm' #define MEM_IOCSET _IOW(MEM_IOC_MAGIC,0,int) #define MEM_IO

Windows Driver—IOCtl的三种数据交互方式(buffer,direct,other)

http://www.hgy413.com/1319.html 简介DeviceIoControl的三种通信方式 Windows Driver-IOCtl的三种数据交互方式(buffer,direct,other),布布扣,bubuko.com

linux设备驱动归纳总结(三):4.ioctl的实现

一.ioctl的简单介绍: 尽管在文件操作结构体"struct file_operations"中有非常多相应的设备操作函数.可是有些命令是实在找不到相应的操作函数. 如CD-ROM的驱动,想要一个弹出光驱的操作,这样的操作并非全部的字符设备都须要的.所以文件操作结构体也不会有相应的函数操作. 出于这种原因,ioctl就有它的用处了----一些没办法归类的函数就统一放在ioctl这个函数操作中.通过指定的命令来实现相应的操作.所以.ioctl函数里面都实现了多个的对硬件的操作.通过应用