創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的岢嵐網(wǎng)站設(shè)計(jì)、移動媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
printf("\nTC9000 濕溫度控制系統(tǒng)V1.0"); printf("\n [1] 報(bào)警設(shè)置"); printf("\n [2] 輸出控制設(shè)置"); printf("\n [3] 濕度/溫度查詢"); printf("\n [4] 系統(tǒng)設(shè)置"); printf("\n [x] 退出系統(tǒng)");
printf(shell_s); fflush(stdout); get_line(cmd);
switch(cmd[0]){ case '1': menu_alarm(cmd); break; case '2': ... }
獲取隊(duì)列ID
id = msgget((key_t)4455,0666|IPC_CREAT);
向隊(duì)列發(fā)送消息
struct st_msg cmd; cmd.index = index; cmd.dat = dat; if((msgid=get_msgid_menu()) < 0) return -1; if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1) return -1;
消息類型處理
#define TEMP_SMG_INDEX_BASE 10 #define UPDATE_TIME_SMG_INDEX 4 msg_type = TEMP_SMG_INDEX_BASE+channel; menu_send_update(msg_type,g_dev->temp_max[channel]);
#ipcs -q //顯示消息隊(duì)列 #ipcrm -q//刪除指定id隊(duì)列
菜單程序頭文件
#ifndef _TC9000_SYS_IPC_H #define _TC9000_SYS_IPC_H #include "config.h" //消息隊(duì)列接收時索引值 #define TEMP_SMG_INDEX_BASE 10 #define WEB_SMG_INDEX 2 #define WEB_UPDATE_SMG_INDEX 3 #define UPDATE_TIME_SMG_INDEX 4 struct st_msg{ long int index; int dat; }; struct st_msg_dev{ long int index; struct st_sys dev; }; #endif
菜單界面程序
#include#include #include #include #include #include #include #include #include #include #include "sys_ipc.h" #include "config.h" int menu_alarm(char * cmd);//報(bào)警功能菜單 int get_line(char *cmd);//獲取命令行輸入 struct st_sys g_dev[1];//全局變量 char shell_s[]="\nG9000 shell>$: ";//命令行提示符號 //同菜單進(jìn)程通信的隊(duì)列,key=4455 int get_msgid_menu(void) { int id = -1; id = msgget((key_t)4455,0666|IPC_CREAT); if(id == -1){ printf("msgget error\n"); exit(1); } return id; } //向主控程序發(fā)送設(shè)置的數(shù)據(jù) /*============================================ 函數(shù)名稱:menu_send_update 功能:向主控程序發(fā)送設(shè)置的數(shù)據(jù) 參數(shù):long int 消息類型 int 消息數(shù)據(jù) 返回值:return 0 返回主菜單 ============================================*/ int menu_send_update(long int index,int dat) { int msgid; struct st_msg cmd; cmd.index = index; cmd.dat = dat; if((msgid=get_msgid_menu()) < 0) return -1; if(msgsnd(msgid,(void*)&cmd,sizeof(int),0)==-1) return -1; return 0; } /*============================================ 函數(shù)名稱:menu_alarm 功能:溫濕度報(bào)警設(shè)置菜單 參數(shù):char* cmd 用戶輸入的命令 返回值:return 0 返回主菜單 ============================================*/ int menu_alarm(char* cmd) { int channel; long int msg_type; while(1){ printf("\n [1] 檢測間隔時間(5-300s)"); printf("\n [2] 溫度上限報(bào)警值(40-90℃)"); printf("\n [3] 溫度下限報(bào)警值(-20-5℃)"); printf("\n [4] 溫度報(bào)警回差設(shè)置(1-10℃)"); printf("\n [x] 返回主菜單"); printf(shell_s); fflush(stdout); get_line(cmd); switch(cmd[0]){ case '1': printf("當(dāng)前檢測間隔時間:%d\n",g_dev->update_time); printf("請輸入新值:"); fflush(stdout); get_line(cmd); g_dev->update_time= atoi(cmd); msg_type = UPDATE_TIME_SMG_INDEX menu_send_update(msg_type,g_dev->update_time); break; case '2': printf("\n 請選擇傳感器編號[1] [2] [3] [4] :"); fflush(stdout); get_line(cmd); channel = atoi(cmd)-1; printf("當(dāng)前溫度上限報(bào)警值:%d\n",g_dev->temp_max[channel]); printf("請輸入新值:"); fflush(stdout); get_line(cmd); g_dev->temp_max[channel]= atoi(cmd); msg_type = TEMP_SMG_INDEX_BASE+channel; menu_send_update(msg_type,g_dev->temp_max[channel]); break; case 'x': return 0; break; default: printf("輸入選項(xiàng)錯誤!\n"); break; } } return 1; } //命令行輸入處理 int get_line(char *cmd) { int i=0; char temp; memset(cmd,0,sizeof(cmd)); while (1) { temp = getchar(); cmd[i]=temp; if(cmd[i]==13 || cmd[i] == 10){ cmd[i]=0; break; } fflush(stdout); i++; } return 0; } /*============================================ 函數(shù)名稱:main 功能:系統(tǒng)命令行處理菜單主程序,通過隊(duì)列同后臺程序通信 參數(shù):void * arg 返回值:int ============================================*/ int main(void) { char cmd[16];//命令數(shù)據(jù)緩沖區(qū) load_dev(g_dev); while(1){ system("clear"); printf("\nTC9000 濕溫度控制系統(tǒng)V1.0"); printf("\n [1] 報(bào)警設(shè)置"); printf("\n [2] 輸出控制設(shè)置"); printf("\n [3] 濕度/溫度查詢"); printf("\n [4] 系統(tǒng)設(shè)置"); printf("\n [x] 退出系統(tǒng)"); printf(shell_s); fflush(stdout); get_line(cmd); switch(cmd[0]){ case '1': menu_alarm(cmd); break; case '2': //menu_out_set(cmd); break; case '3': //menu_data_show(cmd); break; case '4': //menu_sys_set(cmd); break; case 'x': exit(0); break; default: printf("輸入選項(xiàng)錯誤\n"); break; } } }