• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    數據庫中Linux內核的ioctl函數學習

    發布: 2010-11-19 11:44 | 作者: 網絡轉載 | 來源: 領測軟件測試網采編 | 查看: 204次 | 進入軟件測試論壇討論

    領測軟件測試網

    程序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);
    }
    ******************************************************************************************

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>