These were writed and collected by kf701,you can use and modify them but NO WARRANTY.Contact with me : kf_701@21cn.com
程序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 ");
- 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(" ");
- 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;
-
-
- strncpy(ifr.ifr_name, ifname, IFNAMSIZ);
- if (ioctl(skfd, SIOCGMIIPHY, &ifr) < 0)
- {
- fprintf(stderr, "SIOCGMIIPHY on %s failed: %s ", 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 ", 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 ", 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";
-
-
- if (( skfd = socket( AF_INET, SOCK_DGRAM, 0 ) ) < 0 )
- {
- printf("socket error ");
- 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 ");
-
- if (retval == 1)
- printf("Link down ");
-
- if (retval == 0)
- printf("Link up ");
-
- 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> ", pname);
- fprintf(stderr, "returns: ");
- fprintf(stderr, " 0: link detected ");
- fprintf(stderr, " %d: %s ", ENODEV, strerror(ENODEV));
- fprintf(stderr, " %d: %s ", ENONET, strerror(ENONET));
- fprintf(stderr, " %d: %s ", EOPNOTSUPP, strerror(EOPNOTSUPP));
- exit(EXIT_FAILURE);
- }
-
- static
- int
- linktest(const char * devname)
- {
- struct ifreq ifr;
- struct linktest_value edata;
- int fd;
-
-
- memset(&ifr, 0, sizeof(ifr));
- strcpy(ifr.ifr_name, devname);
-
-
- 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 ", 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(" usage:%s dev_no.[0..24] value[0..100] ",argv[0]);
- printf("eg. %s 0 100 ",argv[0]);
- printf(" will change the volume to MAX volume. ");
- printf("The dev_no. are as below: ");
- for (i=0;i<SOUND_MIXER_NRDEVICES;i++){
- if (i%3==0) printf(" ");
- printf("%s:%d ",names[i],i);
- }
- printf(" ");
-
- if (argc<3)
- exit(1);
-
- if ((mixer_fd = open("/dev/mixer",O_RDWR))){
- printf("Mixer opened successfully,working... ");
- value=BASE_VALUE*atoi(argv[2]);
-
- if (ioctl(mixer_fd,MIXER_WRITE(atoi(argv[1])),&value)==0)
- printf("successfully.....");
- else printf("unsuccessfully.....");
- printf("done. ");
- }else
- printf("can't open /dev/mixer error.... ");
-
- exit(0);
- }
(kf701) |