成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

linux系統ioctl使用示例

運維 系統運維
以下是linux系統ioctl使用示例......

程序1:檢測接口的 inet_addr,netmask,broad_addr

程序2:檢查接口的物理連接是否正常

程序3:更簡單一點測試物理連接

程序4:調節音量

*********************************程序1****************************************

#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];

sockfd = socket(AF_INET,SOCK_DGRAM,0);

strncpy(ifr.ifr_name,name,IFNAMSIZ-1);

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");

exit(0);

}

******************************** 程序2*********************************************

#include <stdio.h>

#include <string.h>

#include <errno.h>

#include <fcntl.h>

#include <getopt.h>

#include <sys/socket.h>

#include <sys/ioctl.h>

#include <net/if.h>

#include <stdlib.h>

#include <unistd.h>

typedef unsigned short u16;

typedef unsigned int u32;

typedef unsigned char u8;

#include <linux/ethtool.h>

#include <linux/sockios.h>

int detect_mii(int skfd, char *ifname)

{

struct ifreq ifr;

u16 *data, mii_val;

unsigned phy_id;

/* Get the vitals from the interface. */

strncpy(ifr.ifr_name, ifname, IFNAMSIZ);

if (ioctl(skfd, SIOCGMIIPHY, &ifr) < 0)

{

fprintf(stderr, "SIOCGMIIPHY on %s failed: %s\n", ifname,

strerror(errno));

(void) close(skfd);

return 2;

}

data = (u16 *)(&ifr.ifr_data);

phy_id = data[0];

data[1] = 1;

if (ioctl(skfd, SIOCGMIIREG, &ifr) < 0)

{

fprintf(stderr, "SIOCGMIIREG on %s failed: %s\n", ifr.ifr_name,

strerror(errno));

return 2;

}

mii_val = data[3];

return(((mii_val & 0x0016) == 0x0004) ? 0 : 1);

}

int detect_ethtool(int skfd, char *ifname)

{

struct ifreq ifr;

struct ethtool_value edata;

memset(&ifr, 0, sizeof(ifr));

edata.cmd = ETHTOOL_GLINK;

strncpy(ifr.ifr_name, ifname, sizeof(ifr.ifr_name)-1);

ifr.ifr_data = (char *) &edata;

if (ioctl(skfd, SIOCETHTOOL, &ifr) == -1)

{

printf("ETHTOOL_GLINK failed: %s\n", strerror(errno));

return 2;

}

return (edata.data ? 0 : 1);

}

int main(int argc, char **argv)

{

int skfd = -1;

char *ifname;

int retval;

if( argv[1] )

ifname = argv[1];

else

ifname = "eth0";

/* Open a socket. */

if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 ) ) < 0 )

{

printf("socket error\n");

exit(-1);

}

retval = detect_ethtool(skfd, ifname);

if (retval == 2)

retval = detect_mii(skfd, ifname);

close(skfd);

if (retval == 2)

printf("Could not determine status\n");

if (retval == 1)

printf("Link down\n");

if (retval == 0)

printf("Link up\n");

return retval;

}

*******************************程序3***********************************************

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <errno.h>

#include <net/if.h>

#include <linux/sockios.h>

#include <sys/ioctl.h>

#define LINKTEST_GLINK 0x0000000a

struct linktest_value {

unsigned int    cmd;

unsigned int    data;

};

static

void

usage(const char * pname)

{

fprintf(stderr, "usage: %s <device>\n", pname);

fprintf(stderr, "returns: \n");

fprintf(stderr, "\t 0: link detected\n");

fprintf(stderr, "\t%d: %s\n", ENODEV, strerror(ENODEV));

fprintf(stderr, "\t%d: %s\n", ENONET, strerror(ENONET));

fprintf(stderr, "\t%d: %s\n", EOPNOTSUPP, strerror(EOPNOTSUPP));

exit(EXIT_FAILURE);

}

static

int

linktest(const char * devname)

{

struct ifreq ifr;

struct linktest_value edata;

int fd;

/* setup our control structures. */

memset(&ifr, 0, sizeof(ifr));

strcpy(ifr.ifr_name, devname);

/* open control socket. */

fd=socket(AF_INET, SOCK_DGRAM, 0);

if(fd < 0 ) {

return -ECOMM;

}

errno=0;

edata.cmd = LINKTEST_GLINK;

ifr.ifr_data = (caddr_t)&edata;

if(!ioctl(fd, SIOCETHTOOL, &ifr)) {

if(edata.data) {

fprintf(stdout, "link detected on %s\n", devname);

return 0;

} else {

errno=ENONET;

}

}

perror("linktest");

return errno;

}

int

main(int argc, char *argv[])

{

if(argc != 2) {

usage(argv[0]);

}

return linktest(argv[1]);

}

*************************************程序4**************************************

#include <sys/types.h>

#include <sys/stat.h>

#include <fcntl.h>

#include <sys/ioctl.h>

#include <sys/soundcard.h>

#include <stdio.h>

#include <unistd.h>

#include <math.h>

#include <string.h>

#include <stdlib.h>

#define  BASE_VALUE 257

int main(int argc,char *argv[])

{

int mixer_fd=0;

char *names[SOUND_MIXER_NRDEVICES]=SOUND_DEVICE_LABELS;

int value,i;

printf("\nusage:%s dev_no.[0..24] value[0..100]\n\n",argv[0]);

printf("eg. %s 0 100\n",argv[0]);

printf("    will change the volume to MAX volume.\n\n");

printf("The dev_no. are as below:\n");

for (i=0;i<SOUND_MIXER_NRDEVICES;i++){

if (i%3==0) printf("\n");

printf("%s:%d\t\t",names[i],i);

}

printf("\n\n");

if (argc<3)

exit(1);

if ((mixer_fd = open("/dev/mixer",O_RDWR))){

printf("Mixer opened successfully,working...\n");

value=BASE_VALUE*atoi(argv[2]);

if (ioctl(mixer_fd,MIXER_WRITE(atoi(argv[1])),&value)==0)

printf("successfully.....");

else    printf("unsuccessfully.....");

printf("done.\n");

}else

printf("can't open /dev/mixer error....\n");

exit(0);

}

【編輯推薦】

  1. 在Unix中使用ioctl命令操作IPv4和IPv6的網絡接口
  2. Linux Kernel DRM IOCTL函數未明權限提升漏洞
  3. Linux下配置JDK和Tomcat
責任編輯:趙寧寧 來源: chinaitlab
相關推薦

2017-03-01 11:46:24

Linuxscreen命令示例

2021-09-14 10:55:16

LinuxDate命令

2021-07-11 12:06:07

Linux Date命令

2022-07-05 19:19:11

tcpdumpLinux命令

2010-01-12 16:05:53

Linux Mono

2009-07-03 18:27:03

redhatlinux安全使用

2013-11-15 16:07:26

Linux dfLinux命令

2010-11-23 15:12:03

MySQL授權表

2017-03-01 12:19:17

rsync Linux系統

2023-12-27 14:08:00

LinuxTop命令工具

2020-11-04 18:53:07

Linuxsystemctl運維

2015-10-29 13:10:08

passwd命令Linux

2018-04-16 10:12:46

Linux命令gunzip

2022-08-29 08:33:22

SocatLinux命令

2009-09-28 10:06:09

Linux防火墻Linux規則

2022-01-17 10:05:33

LinuxWatch命令

2018-05-02 08:35:33

LinuxTripwire文件系統

2009-10-22 09:32:51

ghostlinux系統備份

2011-01-11 15:16:37

2022-04-15 14:31:02

鴻蒙操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91精品国产一区二区三区 | 一区二区三区在线 | 亚洲一区av在线 | 亚洲欧美激情精品一区二区 | 少妇一级淫片免费播放 | 亚洲高清免费 | 午夜精品久久久久久久久久久久久 | 一区二区在线看 | 少妇av片| 国产九一精品 | 国产一区二区三区四区 | 精品久久久久久久久久 | 中文字幕一区二区在线观看 | 欧美最猛黑人xxxⅹ 粉嫩一区二区三区四区公司1 | 欧美一级片| 亚洲免费在线观看av | 久久性色 | 国产精品一区二区无线 | 在线观看www视频 | 亚洲精品在线免费 | 久久久久久国产精品免费免费狐狸 | 99热欧美| 97伊人| 午夜不卡福利视频 | 中文成人在线 | 欧美国产精品一区二区三区 | 国产自产c区 | 国产日韩视频 | 狠狠干狠狠操 | 日韩高清在线观看 | 韩日精品在线观看 | 91资源在线 | 一区二区影视 | 亚洲国产精品视频一区 | 欧美日韩一区二区在线观看 | 99这里只有精品视频 | 久久午夜精品 | 99精品欧美一区二区三区综合在线 | 日韩手机在线视频 | 99精品一区二区 | 精品视频一区二区三区在线观看 |