嵌入式linux wpa_supplicant自動配置程式

lxh1205509119發表於2020-12-10

最近專案中需要用到wifi自動連線功能,於是用c++
寫了個wpa_supplicant工具的自動配置連線的程式,實現了wifi的開啟,配置檔案的修改和自動獲取ip地址。

#include<stdio.h>
#include<string>
#include<cstring>
#include<stdlib.h>
#include<iostream>
#include<fstream>


/************************************************************************/
/* char*tostr  字串轉化str型別
輸入:char * 字串地址
無輸出
返回值: str型別的字串
*/
/************************************************************************/
std::string charToStr(char * contentChar)
{
    std::string tempStr;
        for (int i=0;contentChar[i]!='\0';i++)
        {
                tempStr+=contentChar[i];
        }
        return tempStr;
}



/************************************************************************/
/* 修改檔案某行內容
 輸入:檔名 fileName   行號   lineNum ,修改的內容 content
 輸出:檔名 fileName
 無返回值
 tip:1,lineNum從第一行開始 2.content需要加上換行符
*/
/************************************************************************/
void modifyContentInFile(char const *fileName,int lineNum,char *content)
{
    std::ifstream in;
        char line[1024]={'\0'};
        in.open(fileName);
        int i=0;
    std::string tempStr;
        while(in.getline(line,sizeof(line)))
        {
                i++;
                if(lineNum!=i)
                {
                        tempStr+=charToStr(line);
                }
                else
                {
               tempStr+=charToStr(content);
                }
                tempStr+='\n';
        }
        in.close();
    std::ofstream out;
        out.open(fileName);
        out.flush();
        out<<tempStr;
        out.close();
}

int main(int argc,char *argv[])
{
    char ssid[strlen(argv[1])+9];
    char psw[strlen(argv[2])+8];
    printf("argv[1]=%s len=%d\n",argv[1],strlen(argv[1]));
    printf("argv[2]=%s len=%d\n",argv[2],strlen(argv[2]));
    sprintf(ssid,"  ssid=\"%s\"",argv[1]);//第一個引數為名稱
    sprintf(psw,"  psk=\"%s\"",argv[2]);//第二個引數為密碼
    printf("config:%s  %s \n",ssid,psw);

    modifyContentInFile("/etc/wpa_supplicant.conf",5,ssid);//修改配置檔案的第5行wifi名稱
    modifyContentInFile("/etc/wpa_supplicant.conf",7,psw);//修改第7行wifi密碼
    system("ifconfig wlan0 up");//開啟wifi
    system("wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B");
    system("udhcpc -i wlan0");//自動分配ip
    return 0;
}

儲存到WifiConfig.cpp檔案,使用g++交叉編譯器編譯上述程式碼
arm-linux–gnueabihf-g++ WifiConfig.cpp -o wifiConfig
將生成的程式放到開發板上,使用命令可以直接連線wifi。

./wifiConfig wifi名稱 wifi密碼

在這裡插入圖片描述

相關文章