嵌入式开发记录-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; }
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、

浙公网安备 33010602011771号