日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

实战总结的7个C程序,好东西不私藏

發(fā)布時(shí)間:2023/11/30 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 实战总结的7个C程序,好东西不私藏 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

點(diǎn)擊上方“小麥大叔”,選擇“置頂/星標(biāo)公眾號”

福利干貨,第一時(shí)間送達(dá)

在學(xué)習(xí)和工作開發(fā)的時(shí)候,經(jīng)常需要使用到各種各樣不太常用的操作,這種情況一般是自己手動寫一些小程序來處理。因?yàn)樗鼈儾惶S?#xff0c;所以經(jīng)常用了又沒保存,等到下一次在使用的時(shí)候又需要重寫,這樣的非常浪費(fèi)時(shí)間和精力。

所以想在這里統(tǒng)一記錄一下,以備下次重新使用。代碼以實(shí)用為主,如果缺陷,歡迎指出。

1、十六進(jìn)制字符轉(zhuǎn)整型數(shù)字

功能:將16進(jìn)制的字符串轉(zhuǎn)換為10進(jìn)制的數(shù)字。我是沒有找到相應(yīng)的庫函數(shù),所以參考網(wǎng)上的代碼自己手動寫了個(gè)函數(shù)來實(shí)現(xiàn)。

常用的函數(shù)有atoi,atol,他們都是將10進(jìn)制的數(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位,一個(gè)16進(jìn)制位用?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;進(jìn)行累加??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; }

運(yùn)行結(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進(jìn)制或是10進(jìn)制的字符串轉(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)建固定大小的一個(gè)文件,并且把這個(gè)文件填充為固定的數(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;}

運(yùn)行結(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?0000000000000000

4、批量處理圖片

功能:批處理將圖片前面固定的字節(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);????}}} }

運(yùn)行結(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$

運(yùn)行前需要創(chuàng)建兩個(gè)目錄,image用來存放需要處理的圖片,outfile用來存放處理過后的文件。這種處理文件批處理方式很暴力,偶爾用用還是可以的。

5、IO控制小程序

嵌入式設(shè)備系統(tǒng)一般為了節(jié)省空間,一般都會對系統(tǒng)進(jìn)行裁剪,所以很多有用的命令都會被刪除。

在嵌入式設(shè)備中要調(diào)試代碼也是比較麻煩的,一般只能看串口打印。現(xiàn)在寫了個(gè)小程序,專門用來查看和控制海思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設(shè)備中獲取本地IP地址可以使用下面的程序,支持最大主機(jī)有三個(gè)網(wǎng)口的設(shè)備,當(dāng)然這個(gè)網(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

免責(zé)聲明:本文來源網(wǎng)絡(luò)版權(quán)歸原作者所有。如涉及作品版權(quán)問題,請聯(lián)系我進(jìn)行刪除。

—— The End?——

往期推薦

成為嵌入式高手,少不了這100多個(gè)軟硬件開源項(xiàng)目

揭秘,嵌入式OTA技術(shù),到底有多復(fù)雜?

不看后悔!圈內(nèi)老手總結(jié)的18條嵌入式 C 實(shí)戰(zhàn)經(jīng)驗(yàn)

答對10個(gè)算我輸,示波器基礎(chǔ)100問

手把手教你用ESP32 制作一個(gè)游戲機(jī),小白可上手

加入嵌入式技術(shù)交流群一起進(jìn)步

點(diǎn)擊名片關(guān)注我

你點(diǎn)的每個(gè)好看,我都認(rèn)真當(dāng)成了喜歡

總結(jié)

以上是生活随笔為你收集整理的实战总结的7个C程序,好东西不私藏的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。