嵌入式开发记录-day51 Linux C调用shell命令

1、烧写支持WiFi模块的镜像

  1、在make menuconfig中配置编译上支持WiFi模块的选型,重新编译镜像,并烧写;

  2、配置WiFi模块

wpa_passphrase XXX "YYY" >> /etc/wpa_supplicant.conf
其中 XXX 代表您的 WiFi 网络名称, 
YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密码。
例如:
wpa_passphrase 2701 "topeet2015" >> /etc/wpa_supplicant.conf

  运行脚本,启动WiFi ./etc/init.d/mt6620

2、运行tcp服务器程序

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <string.h>
#include <arpa/inet.h>

#define SERVER_POART 56789   // 端口号

int main(int argc,char *argv[])
{

    int sock;
    char buf[128];
    int client_fd;
    int size;
    char *close_led = "closeled";
    char *open_led = "openled";
    char *open_curtain = "opencurtain";
    char *close_curtain = "closecurtain";
    struct sockaddr_in server_addr,clinet_addr;

    sock = socket(AF_INET,SOCK_STREAM,0);
    if(sock == -1)
    {
        printf("error creat socket!\n");
        return -1;
    }

    memset(&server_addr,0,sizeof(server_addr));

    server_addr.sin_family = AF_INET;
    server_addr.sin_port = htons(SERVER_POART);
    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);


    bind(sock,(struct sockaddr*)&server_addr,sizeof(server_addr));


    listen(sock,10);

    size = sizeof(struct sockaddr_in);

    client_fd = accept(sock,(struct sockaddr*)&clinet_addr,&size);


    while(1)
    {
        memset(buf,0,sizeof(buf));
        read(client_fd,buf,sizeof(buf));
        printf("buf is %s\n",buf);

        if(strcmp(buf,open_led) == 0)
        {
            printf("open_led\n");
            system("./zigbee 1 FE 05 91 90 E7 AE 01 FF");  // 拉起另一个程序
        }

        if(strcmp(buf,close_led) == 0)
        {
            printf("close_led\n");
            system("./zigbee 1 FE 05 91 90 E7 AE 02 FF");
        }
        if(strcmp(buf,open_curtain) == 0)
        {
            printf("open_curtain\n");
            system("./zigbee 1 FE 05 91 90 E7 AE 03 FF");
        }
        if(strcmp(buf,close_curtain) == 0)
        {
            printf("close_curtain\n");
            system("./zigbee 1 FE 05 91 90 E7 AE 04 FF");
        }

    }
    close(client_fd);
    close(sock);
    return 0;
}
View Code

3、连接手机端APP测试,由于还没有配置ZigBee模块以及相关设备,因此只能看到打印信息;

4、Linux C调用shell命令

  C程序调用shell命令,常用的有三种方法:system()、popen()、exec 函数族这三种方法。 

  1、使用 system()函数调用,这个是最简单的调用 shell 文件的办法。

  定义函数 int system(const char * string)

    函数说明 system()会调用 fork()产生子进程,由子进程来调用/bin/sh-c,string 来执行参数 string 字符串所代表的命令,此命令执行完后随即返回原调用的进程。

   2、使用 popen 函数

    定义函数 FILE * popen( const char * command,const char * type);

      如果 type 为 r,那么调用进程读进 command 的标准输出。

      如果 type 为 w,那么调用进程写到 command 的标准输入。 

  3、使用 exec 函数族 

5、

 

posted @ 2020-10-22 22:22  笑不出花的旦旦  阅读(211)  评论(0)    收藏  举报