实战总结的7个C程序,好东西不私藏
點擊上方“小麥大叔”,選擇“置頂/星標公眾號”
福利干貨,第一時間送達
在學習和工作開發(fā)的時候,經(jīng)常需要使用到各種各樣不太常用的操作,這種情況一般是自己手動寫一些小程序來處理。因為它們不太常用,所以經(jīng)常用了又沒保存,等到下一次在使用的時候又需要重寫,這樣的非常浪費時間和精力。
所以想在這里統(tǒng)一記錄一下,以備下次重新使用。代碼以實用為主,如果缺陷,歡迎指出。
1、十六進制字符轉(zhuǎn)整型數(shù)字
功能:將16進制的字符串轉(zhuǎn)換為10進制的數(shù)字。我是沒有找到相應的庫函數(shù),所以參考網(wǎng)上的代碼自己手動寫了個函數(shù)來實現(xiàn)。
常用的函數(shù)有atoi,atol,他們都是將10進制的數(shù)字字符串轉(zhuǎn)換為int或是long類型,所以在有些情況下不適用。
/*============================================================================= #?????FileName:?hex2dec.cpp #?????????Desc:?Convert?a?hex?string?to?a?int?number #???????Author:?Caibiao?Lee #??????Version:? #???LastChange:?2018-11-26? #??????History: =============================================================================*/#include?<stdio.h>?? #include?<stdlib.h>?? #include?<string.h>?? #include?<ctype.h>int?c2i(char?ch)?? {??//?如果是數(shù)字,則用數(shù)字的ASCII碼減去48,?如果ch?=?'2'?,則?'2'?-?48?=?2??if(isdigit(ch))??return?ch?-?48;??//?如果是字母,但不是A~F,a~f則返回??if(?ch?<?'A'?||?(ch?>?'F'?&&?ch?<?'a')?||?ch?>?'z'?)??return?-1;??//?如果是大寫字母,則用數(shù)字的ASCII碼減去55,?如果ch?=?'A'?,則?'A'?-?55?=?10??//?如果是小寫字母,則用數(shù)字的ASCII碼減去87,?如果ch?=?'a'?,則?'a'?-?87?=?10??if(isalpha(ch))??return?isupper(ch)???ch?-?55?:?ch?-?87;??return?-1;?? }?int?hex2dec(char?*hex)?? {??int?len;??int?num?=?0;??int?temp;??int?bits;??int?i;??char?str[64]?=?{0};if(NULL==hex){printf("input?para?error?\n");return?0;}if(('0'==hex[0])&&(('X'==hex[1])||('x'==hex[1]))){strcpy(str,&hex[2]);}else{strcpy(str,hex);}printf("input?num?=?%s?\n",str);//?此例中?str?=?"1de"?長度為3,?hex是main函數(shù)傳遞的??len?=?strlen(str);??for?(i=0,?temp=0;?i<len;?i++,?temp=0)??{??//?第一次:i=0, *(str + i)?=?*(str +?0)?=?'1', 即temp = 1 ?//?第二次:i=1, *(str + i)?=?*(str + 1)?=?'d', 即temp = 13 ?//?第三次:i=2, *(str + i)?=?*(str + 2)?=?'d', 即temp = 14 ?temp?=?c2i(?*(str?+?i)?);??//?總共3位,一個16進制位用?4?bit保存??//?第一次:'1'為最高位,所以temp左移?(len - i -1)?* 4 = 2 * 4 = 8 位??//?第二次:'d'為次高位,所以temp左移?(len - i -1)?* 4 = 1 * 4 = 4 位??//?第三次:'e'為最低位,所以temp左移?(len - i -1)?* 4 =?0?* 4 =?0?位??bits?=?(len?-?i?-?1)?*?4;??temp?=?temp?<<?bits;??//?此處也可以用?num?+=?temp;進行累加??num?=?num?|?temp;??}??//?返回結(jié)果??return?num;?? }??int?main(int?argc,?char?**argv) {int?l_s32Ret?=?0;if(2!=argc){printf("=====ERROR!======\n");printf("usage:?%s?Num?\n",?argv[0]);printf("eg?1:?%s?0x400\n",?argv[0]);return?0;}l_s32Ret?=?hex2dec(argv[1]);printf("value?hex?=?0x%x?\n",l_s32Ret);printf("value?dec?=?%d?\n",l_s32Ret);return?0; }運行結(jié)果:
biao@ubuntu:~/test/flash$?./a.out?0x400 input?num?=?400? value?hex?=?0x400? value?dec?=?1024? biao@ubuntu:~/test/flash$2、字符串轉(zhuǎn)整型
功能:將正常輸入的16進制或是10進制的字符串轉(zhuǎn)換為int數(shù)據(jù)類型。
/*============================================================================= #?????FileName:?hex2dec.cpp #?????????Desc:?Convert?a?hex/dec?string?to?a?int?number #???????Author:?Caibiao?Lee #??????Version:? #???LastChange:?2018-12-03? #??????History: =============================================================================*/ #include?<stdio.h>?? #include?<stdlib.h>?? #include?<string.h>?? #include?<ctype.h>int?String2int(char?*strChar) {int?len=0;const?char?*pstrCmp1="0123456789ABCDEF";const?char?*pstrCmp2="0123456789abcdef";char?*pstr=NULL;int?uiValue=0;int?j=0;?unsigned?int?t=0;int?i=0;if(NULL==strChar)return?-1;if(0>=(len=strlen((const?char?*)strChar)))return?-1;if(NULL!=(pstr=strstr(strChar,"0x"))||NULL!=(pstr=strstr(strChar,"0X"))){pstr=(char?*)strChar+2;if(0>=(len=strlen((const?char?*)pstr)))return?-1;for(i=(len-1);i>=0;i--){if(pstr[i]>'F'){for(t=0;t<strlen((const?char?*)pstrCmp2);t++){?if(pstrCmp2[t]==pstr[i])uiValue|=(t<<(j++*4));}}else{for(t=0;t<strlen((const?char?*)pstrCmp1);t++){?if(pstrCmp1[t]==pstr[i])uiValue|=(t<<(j++*4));}}}}else{uiValue=atoi((const?char*)strChar);}return?uiValue; }int?main(int?argc,?char?**argv) {int?l_s32Ret?=?0;if(2!=argc){printf("=====ERROR!======\n");printf("usage:?%s?Num?\n",?argv[0]);printf("eg?1:?%s?0x400\n",?argv[0]);return?0;}l_s32Ret?=?String2int(argv[1]);printf("value?hex?=?0x%x?\n",l_s32Ret);printf("value?dec?=?%d?\n",l_s32Ret);return?0; }3、創(chuàng)建文件并填充固定數(shù)據(jù)
功能:創(chuàng)建固定大小的一個文件,并且把這個文件填充為固定的數(shù)據(jù)。
/*============================================================================= #?????FileName:?CreateFile.cpp #?????????Desc:?創(chuàng)建固定大小的文件,然后填充固定的數(shù)據(jù) #???????Author:?Caibiao?Lee #??????Version:? #???LastChange:?2018-11-26? #??????History: =============================================================================*/ #include?<stdio.h>?? #include?<stdlib.h>?? #include?<string.h>?? #include?<ctype.h>//#define?FILL_DATA_VALUE??0xff #define?FILL_DATA_VALUE??0x30?//char?0int?c2i(char?ch)?? {??if(isdigit(ch))??return?ch?-?48;??if(?ch?<?'A'?||?(ch?>?'F'?&&?ch?<?'a')?||?ch?>?'z'?)??return?-1;??if(isalpha(ch))??return?isupper(ch)???ch?-?55?:?ch?-?87;??return?-1;?? }?int?hex2dec(char?*hex)?? {??int?len;??int?num?=?0;??int?temp;??int?bits;??int?i;??char?str[64]?=?{0};if(NULL==hex){printf("input?para?error?\n");return?0;}if(('0'==hex[0])&&(('X'==hex[1])||('x'==hex[1]))){strcpy(str,&hex[2]);}else{strcpy(str,hex);}printf("input?num?=?%s?\n",str);len?=?strlen(str);??for?(i=0,?temp=0;?i<len;?i++,?temp=0)??{??temp?=?c2i(?*(str?+?i)?);??bits?=?(len?-?i?-?1)?*?4;??temp?=?temp?<<?bits;??num?=?num?|?temp;??}??return?num;?? }??int?main(int?argc,?char?**argv) {FILE?*l_pFile?=?NULL;int??l_s32Rest?=?0;unsigned?int?l_WriteLen?=?0;unsigned?int?l_FileLen?=?0;unsigned?char?TempData[1024]?=?{FILL_DATA_VALUE};if(3!=argc){printf("usage:?%s?FileName??FileLen?\n?",?argv[0]);printf("eg:?%s?./Outfile.bin?0x400?\n?",?argv[0]);return?0;};const?char?*l_pFileName?=?argv[1];if(NULL==l_pFileName){printf("input?file?name?is?NULL?\n");return?-1;}if(('0'==argv[2][0])&&(('X'==argv[2][1])||('x'==argv[2][1]))){l_FileLen?=?hex2dec(argv[2]);}else{l_FileLen?=?atoi(argv[2]);}printf("Need?To?Write?Data?Len?%d?\n",l_FileLen);printf("Fill?Data?Vale?=?0x%x?\n",FILL_DATA_VALUE);for(int?i=0;i<1024;i++){TempData[i]?=?FILL_DATA_VALUE;}l_pFile?=?fopen(l_pFileName,"w+");if(l_pFile==NULL){printf("open?file?%s?error?\n",l_pFileName);return?-1;}while(l_WriteLen<l_FileLen){if(l_FileLen<1024){l_s32Rest?=?fwrite(TempData,1,l_FileLen,l_pFile);}else{l_s32Rest?=?fwrite(TempData,1,1024,l_pFile);}if(l_s32Rest?<=?0){break;};l_WriteLen?+=l_s32Rest;?}if(NULL!=l_pFile){fclose(l_pFile);l_pFile?=?NULL;}return?0;}運行結(jié)果:
biao@ubuntu:~/test/flash$?gcc?CreateFile.cpp? biao@ubuntu:~/test/flash$?ls a.out??CreateFile.cpp??hex2dec.cpp??main.cpp??out.bin biao@ubuntu:~/test/flash$?./a.out?./out.bin?0x10 input?num?=?10? Need?To?Write?Data?Len?16? Fill?Data?Vale?=?0x30? biao@ubuntu:~/test/flash$?ls a.out??CreateFile.cpp??hex2dec.cpp??main.cpp??out.bin biao@ubuntu:~/test/flash$?vim?out.bin?1?00000000000000004、批量處理圖片
功能:批處理將圖片前面固定的字節(jié)數(shù)刪除。
/*============================================================================= #?????FileName:?CutFile.cpp #?????????Desc:?批量處理,將圖片的前面固定字節(jié)刪除 #???????Author:?Caibiao?Lee #??????Version:? #???LastChange:?2018-11-26? #??????History: =============================================================================*/ #include?<stdio.h> #include?<stdlib.h> #include?<string.h> #include?<unistd.h> #include?<sys/stat.h>#define?START_READ_POSITION??128 #define?PHOTO_START_TIME??83641 //l_s32PhotoTime?=?92809;int?Cut_file(char?*?InputFile) {FILE?*l_pFileInput?=?NULL;FILE?*l_pFileOutput?=?NULL;char?l_ars8OutputName[128]?=?{0};unsigned?char?l_arru8TempData[1024]?=?{0};int?l_s32Ret?=?0;static?unsigned?int?ls_u32Num?=?0;if(NULL==?InputFile)?{goto?ERROR;}//sprintf(l_ars8OutputName,"./outfile/_%s",&InputFile[8]);sprintf(l_ars8OutputName,"./outfile/00%d.jpg",ls_u32Num++);//printf("out?file?name?%s?\n",l_ars8OutputName);l_pFileInput?=?fopen(InputFile,"rb+");if(NULL==l_pFileInput){printf("input?file?open?error\n");goto?ERROR;}l_pFileOutput?=?fopen(l_ars8OutputName,"w+");if(NULL==l_pFileOutput){printf("out?file?open?error\n");goto?ERROR;}fseek(l_pFileInput,START_READ_POSITION,SEEK_SET);while(!feof(l_pFileInput)){l_s32Ret?=?fread(l_arru8TempData,1,1024,l_pFileInput);if(l_s32Ret<0){break;}l_s32Ret?=?fwrite(l_arru8TempData,1,l_s32Ret,l_pFileOutput);if(l_s32Ret<0){break;}}ERROR:if(NULL!=l_pFileOutput){fclose(l_pFileOutput);l_pFileOutput?=NULL;};if(NULL?!=l_pFileInput);{fclose(l_pFileInput);l_pFileInput?=NULL;} }int?main(void) {char?l_arrs8InputName[128]?=?{0};char?l_s8PhotoChannel?=?0;int??l_s32PhotoTime?=?0;l_s8PhotoChannel?=?3;l_s32PhotoTime?=?PHOTO_START_TIME;/**從第一通道開始**/for(int?j=1;j<l_s8PhotoChannel;j++){for(int?i=l_s32PhotoTime;i<235959;i++){memset(l_arrs8InputName,0,sizeof(l_arrs8InputName));sprintf(l_arrs8InputName,"./image/%dY%06d.jpg",j,i);if(0==access(l_arrs8InputName,F_OK)){printf("%s\n",l_arrs8InputName);Cut_file(l_arrs8InputName);????}}} }運行結(jié)果:
biao@ubuntu:~/test/photo$?gcc?CutFile.cpp? biao@ubuntu:~/test/photo$?ls a.out??CutFile.cpp??image??outfile biao@ubuntu:~/test/photo$?./a.out? ./image/1Y083642.jpg ./image/1Y083714.jpg ./image/1Y083747.jpg ./image/1Y083820.jpg ./image/1Y083853.jpg ./image/1Y083925.jpg ./image/1Y084157.jpg ./image/1Y084228.jpg ./image/1Y084301.jpg ./image/1Y084334.jpg ./image/1Y084406.jpg ./image/1Y084439.jpg ./image/1Y084711.jpg ./image/1Y084742.jpg ./image/1Y173524.jpg ./image/1Y173556.jpg ./image/1Y173629.jpg ./image/1Y173702.jpg ./image/1Y173933.jpg ./image/1Y174004.jpg ./image/1Y174244.jpg ./image/1Y174315.jpg ./image/1Y174348.jpg ./image/1Y174420.jpg ./image/1Y174454.jpg ./image/1Y174733.jpg biao@ubuntu:~/test/photo$?tree . ├──?a.out ├──?CutFile.cpp ├──?image │???├──?1Y083642.jpg │???├──?1Y083714.jpg │???├──?1Y083747.jpg │???├──?1Y083820.jpg │???├──?1Y083853.jpg │???├──?1Y083925.jpg │???├──?1Y084157.jpg │???├──?1Y084228.jpg │???├──?1Y084301.jpg │???├──?1Y084334.jpg │???├──?1Y084406.jpg │???├──?1Y084439.jpg │???├──?1Y084711.jpg │???├──?1Y084742.jpg │???├──?1Y173524.jpg │???├──?1Y173556.jpg │???├──?1Y173629.jpg │???├──?1Y173702.jpg │???├──?1Y173933.jpg │???├──?1Y174004.jpg │???├──?1Y174244.jpg │???├──?1Y174315.jpg │???├──?1Y174348.jpg │???├──?1Y174420.jpg │???├──?1Y174454.jpg │???└──?1Y174733.jpg └──?outfile├──?000.jpg├──?0010.jpg├──?0011.jpg├──?0012.jpg├──?0013.jpg├──?0014.jpg├──?0015.jpg├──?0016.jpg├──?0017.jpg├──?0018.jpg├──?0019.jpg├──?001.jpg├──?0020.jpg├──?0021.jpg├──?0022.jpg├──?0023.jpg├──?0024.jpg├──?0025.jpg├──?002.jpg├──?003.jpg├──?004.jpg├──?005.jpg├──?006.jpg├──?007.jpg├──?008.jpg└──?009.jpg2?directories,?54?files biao@ubuntu:~/test/photo$運行前需要創(chuàng)建兩個目錄,image用來存放需要處理的圖片,outfile用來存放處理過后的文件。這種處理文件批處理方式很暴力,偶爾用用還是可以的。
5、IO控制小程序
嵌入式設備系統(tǒng)一般為了節(jié)省空間,一般都會對系統(tǒng)進行裁剪,所以很多有用的命令都會被刪除。
在嵌入式設備中要調(diào)試代碼也是比較麻煩的,一般只能看串口打印。現(xiàn)在寫了個小程序,專門用來查看和控制海思Hi3520DV300芯片的IO電平狀態(tài)。
/*============================================================================= #?????FileName:?Hi3520_IO_CTRL.cpp #?????????Desc:?Hi3520DV300?IO?Write?and??Read #???????Author:?Caibiao?Lee #??????Version:? #???LastChange:?2018-11-30 #??????History: =============================================================================*/ #include?<stdio.h> #include?<stdlib.h> #include?"hstGpioAL.h"int?PrintfInputTips(char?*ps8Name) {printf("===========?error!!!?========\n\n");printf("usage?Write:?%s?GPIO?bit?value?\n",?ps8Name);printf("usage?Read?:?%s?GPIO?bit?\n",?ps8Name);printf("eg?Write?1?to?GPIO1_bit02??:?????%s?1?2?1\n",?ps8Name);printf("eg?Read??GPIO1_bit02?Value?:?????%s?1?2?\n\n",?ps8Name);printf("=============BT20==================\n")printf("USB?HUB????GPIO_0_2??1_UP;?0_Down?\n");printf("RESET_HD???GPIO_13_0?0_EN;?1_disEN\n");printf("Power_HD???GPIO_13_3?1_UP;?0_Down?\n");return?0; }int?main(int?argc,?char?**argv) {if((3!=argc)&&(4!=argc)){PrintfInputTips(argv[0]);return?-1;}unsigned?char?l_u8GPIONum?=?0;unsigned?char?l_u8GPIOBit?=?0;unsigned?char?l_u8SetValue?=?0;GPIO_GROUP_E??l_eGpioGroup;GPIO_BIT_E???l_eBit;GPIO_DATA_E???l_eData;l_u8GPIONum???=?atoi(argv[1]);l_u8GPIOBit???=?atoi(argv[2]);if(l_u8GPIONum<14){l_eGpioGroup?=?(GPIO_GROUP_E)l_u8GPIONum;}else{printf("l_u8GPIONum?error?l_u8GPIONum?=?%d\n",l_u8GPIONum);return?-1;};if(l_u8GPIOBit<8){l_eBit?=?(GPIO_BIT_E)l_u8GPIOBit;}else{printf("l_u8GPIOBit?error?l_u8GPIOBit?=?%d\n",l_u8GPIOBit);return?-1;}if(NULL!=argv[3]){l_u8SetValue?=?atoi(argv[3]);if(0==l_u8SetValue){l_eData?=?(GPIO_DATA_E)l_u8SetValue;}else?if(1==l_u8SetValue){l_eData?=?(GPIO_DATA_E)l_u8SetValue;}else{printf("l_u8SetValue?error?l_u8SetValue?=?%d\n",l_u8SetValue);}}if(3==argc)???????????????????????????????????????????????????????{/**read**/??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????printf("read?GPIO%d?Bit%d?\n",l_u8GPIONum,l_u8GPIOBit);???????????/**set?input**/???????????????????????????????????????????????HstGpio_Set_Direction(l_eGpioGroup,?l_eBit,?GPIO_INPUT);????????????????????????/**read?**/???????????????????????????????????????????????????????????????????????????????char?l_s8bit_val?=?0;?????????????????????????????????????????????????????????????????????HstGpio_Get_Value(l_eGpioGroup,?l_eBit,?&l_s8bit_val);????????????????????????????????????printf("read?Data?=?%d?\n",l_s8bit_val);??????????????????????????????????????????????????}else?if(4==argc)?????????????????????????????????????????????????????????????????????????????{/**write**/????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????printf("Write?GPIO?%d;?Bit?%d;?Value?%d\n",l_u8GPIONum,l_u8GPIOBit,l_u8SetValue);?????????/***set?IO?output*/???????????????????????????????????????????????????????????????????????HstGpio_Set_Direction(l_eGpioGroup,?l_eBit,?GPIO_OUPUT);??????????????????????????????????/**Write?To?IO**/?HstGpio_Set_Value(l_eGpioGroup,l_eBit,l_eData);}else????????????????????????????????????????????{?????????????????????????????????????????????????????????????????????????????????????????????}return?0;}6、文件固定位置插入數(shù)據(jù)
在文件的固定位置插入固定的數(shù)據(jù)。
#include?<stdio.h> #include?<stdlib.h> #include?<string.h>#define?BASIC_FILE_NAME??"./nandflash.bin" #define?UBOOT_FILE_NAME??"./u-boot.bin" #define?KERNEL_FILE_NAME?"./kernel.bin" #define?ROOTFS_FILE_NAME?"./rootfs.bin" #define?APP_FILE_NAME??"./app.bin"#define?UBOOT_POSITION??0x00 #define?KERNEL_POSITION??0x100000 #define?ROOTFS_POSITION??0x500000 #define?APP_POSITION??0x2700000int?InsertData(FILE?*pfBasic,FILE?*psInsert,int?s32Position) {int?l_S32Ret?=?0;unsigned?char?l_arru8Temp[1024]?=?{0xff};fseek(pfBasic,s32Position,SEEK_SET);fseek(psInsert,0,SEEK_SET);while(1){l_S32Ret?=?fread(l_arru8Temp,1,1024,psInsert);if(l_S32Ret?>?0){l_S32Ret?=?fwrite(l_arru8Temp,1,l_S32Ret,pfBasic);if(l_S32Ret<=0){printf("line?%d?error?l_S32Ret?=?%d?\n",__LINE__,l_S32Ret);return?-1;}}else{break;}}return?0; }int?main(void) {int?l_s32Ret?=?0;FILE?*l_pfBasec?=?NULL;FILE?*l_pfUboot?=?NULL;FILE?*l_pfKernel?=?NULL;FILE?*l_pfRootfs?=?NULL;FILE?*l_pfApp?=?NULL;l_pfBasec?=?fopen(BASIC_FILE_NAME,"r+");if(NULL==l_pfBasec){printf("line?%d?error?\n",__LINE__);goto?ERROR;}l_pfUboot?=?fopen(UBOOT_FILE_NAME,"r");if(NULL==l_pfUboot){printf("line?%d?error?\n",__LINE__);goto?ERROR;}l_pfKernel?=?fopen(KERNEL_FILE_NAME,"r");if(NULL==l_pfKernel){printf("line?%d?error?\n",__LINE__);goto?ERROR;}l_pfRootfs?=?fopen(ROOTFS_FILE_NAME,"r");if(NULL==l_pfRootfs){printf("line?%d?error?\n",__LINE__);goto?ERROR;}l_pfApp?=?fopen(APP_FILE_NAME,"r");if(NULL==l_pfApp){printf("line?%d?error?\n",__LINE__);goto?ERROR;}if(0>?InsertData(l_pfBasec,l_pfUboot,UBOOT_POSITION)){printf("line?%d?error?\n",__LINE__);goto?ERROR;}if(0>?InsertData(l_pfBasec,l_pfKernel,KERNEL_POSITION)){printf("line?%d?error?\n",__LINE__);goto?ERROR;}if(0>?InsertData(l_pfBasec,l_pfRootfs,ROOTFS_POSITION)){printf("line?%d?error?\n",__LINE__);goto?ERROR;}if(0>?InsertData(l_pfBasec,l_pfApp,APP_POSITION)){printf("line?%d?error?\n",__LINE__);goto?ERROR;}ERROR:if(NULL!=l_pfBasec){fclose(l_pfBasec);l_pfBasec?=?NULL;}if(NULL!=l_pfUboot){fclose(l_pfUboot);l_pfUboot?=?NULL;}if(NULL!=l_pfKernel){fclose(l_pfKernel);l_pfKernel?=?NULL;}if(NULL!=l_pfRootfs){fclose(l_pfRootfs);l_pfRootfs?=?NULL;}if(NULL!=l_pfApp){fclose(l_pfApp);l_pfApp?=?NULL;}return?0; }7、獲取本地IP地址
在linux設備中獲取本地IP地址可以使用下面的程序,支持最大主機有三個網(wǎng)口的設備,當然這個網(wǎng)卡數(shù)可以修改。
#include?<stdio.h> #include?<ifaddrs.h> #include?<netinet/in.h> #include?<string.h> #include?<arpa/inet.h>int?get_local_ip(char?*ps8IpList) {struct?ifaddrs?*ifAddrStruct;char?l_s8IpAddr[INET_ADDRSTRLEN];void?*tmpAddrPtr;int?l_s32IPCount?=?0;getifaddrs(&ifAddrStruct);while?(ifAddrStruct?!=?NULL)?{if?(ifAddrStruct->ifa_addr->sa_family==AF_INET){tmpAddrPtr=&((struct?sockaddr_in?*)ifAddrStruct->ifa_addr)->sin_addr;inet_ntop(AF_INET,?tmpAddrPtr,?l_s8IpAddr,?INET_ADDRSTRLEN);if?(strcmp(l_s8IpAddr,?"127.0.0.1")?!=?0)?{if(l_s32IPCount?==?0){memcpy(ps8IpList,?l_s8IpAddr,?INET_ADDRSTRLEN);}?else?{memcpy(ps8IpList+INET_ADDRSTRLEN,?l_s8IpAddr,?INET_ADDRSTRLEN);}l_s32IPCount++;}}ifAddrStruct=ifAddrStruct->ifa_next;}freeifaddrs(ifAddrStruct);return?l_s32IPCount; }int?main() {char?l_arrs8IpAddrList[3][INET_ADDRSTRLEN];int?l_s32AddrCount;memset(l_arrs8IpAddrList,?0,?sizeof(l_arrs8IpAddrList));l_s32AddrCount?=?get_local_ip(*l_arrs8IpAddrList);for(l_s32AddrCount;l_s32AddrCount>0;l_s32AddrCount--){printf("Server?Local?IP%d:?%s\n",l_s32AddrCount,l_arrs8IpAddrList[l_s32AddrCount-1]);}return?0; }來源:https://caibiao-lee.blog.csdn.net/?type=blog
免責聲明:本文來源網(wǎng)絡版權歸原作者所有。如涉及作品版權問題,請聯(lián)系我進行刪除。
—— The End?——
往期推薦
成為嵌入式高手,少不了這100多個軟硬件開源項目
揭秘,嵌入式OTA技術,到底有多復雜?
不看后悔!圈內(nèi)老手總結(jié)的18條嵌入式 C 實戰(zhàn)經(jīng)驗
答對10個算我輸,示波器基礎100問
手把手教你用ESP32 制作一個游戲機,小白可上手
加入嵌入式技術交流群一起進步
點擊名片關注我
你點的每個好看,我都認真當成了喜歡
總結(jié)
以上是生活随笔為你收集整理的实战总结的7个C程序,好东西不私藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数据学习资源【私藏】
- 下一篇: 2019年末逆向复习系列之从猫眼字体反爬