linux代码测试片段

第一章.文件写入

1.文件写入

测试写入文件代码片段。

    {
        FILE *pFp;
        pFp = fopen("/var/test.log", "w+");
        fprintf(pFp, "server_addr2: %s\n", server_addr2);
        fprintf(pFp, "server_addr3: %s\n", server_addr3);
        fclose(pFp);
    }

2.读取文件内容

第二章.网络

1.判断ipv4地址

int ret = 0;
char *v4IPAddr = "192.168.137.1";
INT8U iV4IPAddress[16];
ret = inet_pton(AF_INET, (char *)v4IPAddr, iV4IPAddress);
if(ret <= 0)
{
	printf("invalid ipv4 address...\n");
}

2.判断ipv6地址

int ret = 0;
char *v6IPAddr = "xx::xx::xx::";
INT8U iV6IPAddress[46];
ret = inet_pton(AF_INET6, (char *)v6IPAddr, iV6IPAddress);
if(ret <= 0)
{
	printf("invalid ipv6 address...\n");
}

3.判断domain域名

int ret = 0;
char *domainAddress = "www.baidu.com";
struct addrinfo *pAddrinfo;
INT8U iV6IPAddress[46];
ret = getaddrinfo((char *)domainAddress, NULL, NULL, &pAddrinfo);
if(ret <= 0)
{
	printf("invalid domain address...\n");
}

4.ip到域名与域名到ip测试

#include <stdio.h>
#include <string.h>

#include <sys/socket.h>
#include<netdb.h>


int ip_to_hostname(char *ip)
{
    int ret = 0;
   //int getaddrinfo( const char *hostname, const char *service, 
   //const struct addrinfo *hints, struct addrinfo **result );
    struct addrinfo *res, *res_p;
    struct addrinfo hints;
    memset(&hints, 0, sizeof(struct addrinfo));

    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_CANONNAME | AI_NUMERICHOST;
    hints.ai_protocol = 0;

    ret = getaddrinfo(ip, NULL, &hints, &res);
    if (ret != 0) {
        printf("getaddrinfo[ip to hostname]: %s,return\n", gai_strerror(ret));
        return -1;
    }   

    for (res_p = res; res_p != NULL; res_p = res_p->ai_next) {
        char host[1024] = {0};
        ret = getnameinfo(res_p->ai_addr, res_p->ai_addrlen, host, sizeof(host), NULL, 0, NI_NAMEREQD);
        if(ret != 0)
            printf("getnameinfo: %s\n", gai_strerror(ret));
        else
            printf("hostname: %s\n", host);
    }
    freeaddrinfo(res);
    return ret;
}


int hostnameToIp(char *hostname)
{
    int ret = 0;
   //int getaddrinfo( const char *hostname, const char *service, 
   //const struct addrinfo *hints, struct addrinfo **result );
    struct addrinfo *res, *res_p;
    struct addrinfo hints;
    memset(&hints, 0, sizeof(struct addrinfo));

    hints.ai_family = AF_UNSPEC;
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_flags = AI_CANONNAME;
    hints.ai_protocol = 0;

    ret = getaddrinfo(hostname, NULL, &hints, &res);
    if (ret != 0) {
        printf("getaddrinfo: %s , return\n", gai_strerror(ret));
        return -1;
    }

    for (res_p = res; res_p != NULL; res_p = res_p->ai_next) {
        char host[1024] = {0};
        ret = getnameinfo(res_p->ai_addr, res_p->ai_addrlen, host, sizeof(host), NULL, 0, NI_NUMERICHOST);
        if(ret != 0)
            printf("getnameinfo: %s\n", gai_strerror(ret));
        else
            printf("ip: %s\n", host);
    }
    freeaddrinfo(res);
    return ret;
}

int main()
{
   //int getaddrinfo( const char *hostname, const char *service, 
   //const struct addrinfo *hints, struct addrinfo **result );
    printf("============test ip to hostname==================\n");
    //ip_to_hostname("192.168.18.204");
    //ip_to_hostname("127.0.0.1");
    ip_to_hostname("192.168.18.24");
    printf("============test hostname to ip==================\n");
    hostnameToIp("www.baidu.com");
    return 0;
}

测试结果:
测试ip到hostname与hostname到ip

5.gethostbyname

注意该函数不是线程安全的。例如在rsyslog-8.4.2中描述:
库函数接口

第三章.硬件测试

void *testeeprom(void *pArg)
{
    char  BusName[64];
    INT8U SlaveAddr = 0xa8;
	INT8U WR_BUF[64];
	INT8U WR_Count;
    INT8U RD_BUF[1024];
	int RD_Count = 402;
    int i = 0;

    sleep(10);
    INT8U RD_BUFTmp[1024];

    WR_Count = 2;
    sprintf(BusName,"/dev/i2c%d",0);
    
	if((i2c_master_readwrite (BusName,SlaveAddr>>1, WR_BUF, RD_BUF, WR_Count, RD_Count) <0)
	{
		printf("Read eeprom  Fail\n");
	}
    
    memcpy(RD_BUFTmp,RD_BUF,402);
    printf("eeprom data....\n");
    for(i = 0 ; i < 32 ; i ++)
    {
        printf("0x%02x ",RD_BUFTmp[i]);
    }
    printf("\n");
    for(i = 32 ; i < 64 ; i ++)
    {
        printf("0x%02x ",RD_BUFTmp[32 + i]);
    }
    printf("\n");

    {
        FILE *pFp;
        pFp = fopen("/var/test.log", "w+");
        for(i = 0 ; i < 402 ; i ++)
        {
            fprintf(pFp,"%02x ",RD_BUFTmp[i]);
        }        
        fclose(pFp);
    }

	
    while(1)
    {
    	WR_BUF[0] = 0;
        WR_BUF[1] = 0;
         
 	    if(i2c_master_readwrite (BusName,SlaveAddr>>1, WR_BUF, RD_BUF, WR_Count, RD_Count) <0)
        {
            printf("Read eeprom  Fail\n");
        }   
         
        for(i = 0 ; i < 402 ; i ++)
        {
            if(RD_BUF[i] != RD_BUFTmp[i])
            {
                
                {
                    printf("eeprom data is not right....\n");

                    { 
                        FILE *pFp;
                        pFp = fopen("/var/test1.log", "w+");
                        for(i = 0 ; i < 1024 ; i ++)
                        {
                            fprintf(pFp,"%02x ",RD_BUF[i]);
                        }        
                        fclose(pFp);
                    }
                    while(1){
                        printf("eeprom data is not right....\n");
                        sleep(1);        
                    }
                    
                }
                
                return NULL;
            }    
        }
    	
    	sleep(1);
    }
}

第四章: 信号捕捉

1.信号捕捉代码

int InstallSignal(int SigNum,void (*sighandler)(int sig))
{
    struct sigaction action;

    action.sa_handler = sighandler;
    (void)sigfillset( &action.sa_mask );
    action.sa_flags = SA_RESTART;
    if( sigaction( SigNum, &action, NULL ) < 0 )
    {
        printf ( "Cannot catch signal SigNum %d\n",SigNum);
    }
    return 0;
}

调用方法:

InstallSignal(SIGSEGV, sigsegv);

其中:

static void sigsegv(/*int i*/)
{
	//print_backtrace();
    void *pBuf[ADDR_MAX_NUM] = {0};
    int iAddrNum = backtrace(pBuf, ADDR_MAX_NUM);
    printf("BACKTRACE: NUMBER OF ADDRESSES IS:%d\n\n", iAddrNum);
    char ** strSymbols = backtrace_symbols(pBuf, iAddrNum);
    if (strSymbols == NULL) {
        printf("BACKTRACE: CANNOT GET BACKTRACE SYMBOLS\n");
        return;
    }
    int ii = 0;
    for (ii = 0; ii < iAddrNum; ii++) {
        printf("%03d %s\n", iAddrNum-ii, strSymbols[ii]);
    }
    printf("\n");
    free(strSymbols);
    strSymbols = NULL;   
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值