项目保密。在此记录一些知识点:

Linux  c 读取文件可以一行一行的读:read = getline(&line, &len, fp), windows的.txt文件的每一行结尾符是"\r\n", 而linux是"\n"

Linux c 向文件中写入空行:fwrite("\r\n", 1, 2, fp)

一个调试技巧:#ifdef DEBUG  #else #endif

字符串复制函数: memcpy() 比strcpy()更好用,出错更少

结构体或者数组初始化用它更方便: memset()

switch()函数只能匹配数字,不能匹配字符串。字符串匹配用strcmp()更好

u8,u16,u32   :      #define u16 unsigned short        #define u8 unsigned char

悄悄的把源码贴出来:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<unistd.h>
#include<fcntl.h>
#include<signal.h>
#include<sys/stat.h>
#include <sys/time.h>#define u16 unsigned short
#define u8 unsigned char#define SIPCMSG_PARAM_SIZE 150
#define MAX 150#define DEBUG // Main CMD
#define SIPC_MAIN_CMD_PWR 0x01
#define SIPC_MAIN_CMD_DISP 0x07
#define SIPC_MAIN_CMD_NET 0x08
#define SIPC_MAIN_CMD_GPRS 0x0D
#define SIPC_MAIN_CMD_GEN 0x80
// Sub CMD for Network
#define SIPC_NET_PREFERRED_PLMN 0x01
#define SIPC_NET_PLMN_SELECTION 0x02
#define SIPC_NET_SERVING_NETWORK 0x03
#define SIPC_NET_PLMN_LIST 0x04
#define SIPC_NET_NETWORK_REGISTRATION 0x05
#define SIPC_NET_SUBSCRIBER_NUM 0x06
#define SIPC_NET_BAND_SELECTION 0x07
#define SIPC_NET_SERVICE_DOMAIN_CFG 0x08
#define SIPC_NET_POWER_ON_ATTACH_CFG 0x09
#define SIPC_NET_MODE_SELECT 0x0A
#define SIPC_NET_ACQUISITION_ORDER 0x0B
#define SIPC_NET_NETWORK_IDENTITY 0x0C
#define SIPC_NET_HANDOFF_DATA_CONNECTION 0x0F
#define SIPC_NET_CELL_INFORMATION 0x11
#define SIPC_NET_RAT_INFO_EMERGENCY 0x12
#define SIPC_NET_CSG_SEARCH 0x13
#define SIPC_NET_DUAL_STANBY_PREFERENCE 0x16
#define SIPC_NET_DOMAIN_SPECIFIC_RESTRICT 0x17
#define SIPC_NET_ACB_INFORMATION 0x18
#define SIPC_NET_SSAC_INFORMATION 0x19
#define SIPC_NET_VOWIFI_HO_THRESHOLD 0x1C
#define SIPC_NET_LTE_BAND_PRIORITY 0x20
#define SIPC_NET_LTE_ROAMING 0x21
#define SIPC_NET_LTE_CA 0x22
#define SIPC_NET_VARIOUS_NAS_TIMERS 0x26
// Sub CMD for Power
#define SIPC_PWR_PHONE_POWER_UP 0x01
#define SIPC_PWR_PHONE_POWER_OFF 0x02
#define SIPC_PWR_PHONE_RESET 0x03
#define SIPC_PWR_BATTERY_STATUS 0x04
#define SIPC_PWR_PHONE_UNDEFINED_5 0x05
#define SIPC_PWR_PHONE_UNDEFINED_6 0x06
#define SIPC_PWR_PHONE_STATE 0x07
// Sub CMD for Display
#define SIPC_DISP_ICON_INFO 0x01
#define SIPC_DISP_RSSI_INFO 0x06
// Sub CMD for GPRS
#define SIPC_GPRS_DEFINE_PDP_CONTEXT 0x01
#define SIPC_GPRS_QOS_PROFILE 0x02
#define SIPC_GPRS_PS_ATTACH_DETACH 0x03
#define SIPC_GPRS_PDP_CONTEXT_ACT_DEACT 0x04
#define SIPC_GPRS_ENTER_DATA_STATE 0x05
#define SIPC_GPRS_SHOW_PDP_ADDRESS 0x06
#define SIPC_GPRS_MOBILE_STATION_CLASS 0x07
#define SIPC_GPRS_3G_QOS_PROFILE 0x08
#define SIPC_GPRS_MULTIPLE_PDP_IP 0x09
#define SIPC_GPRS_DEFINE_SECONDARY_PDP_CONTEXT 0x0A
#define SIPC_GPRS_TRAFFIC_FLOW_TEMPLATE 0x0B
#define SIPC_GPRS_HSDPA_STATUS 0x0C
#define SIPC_GPRS_CURRENT_SESSION_DATA_COUNTER 0x0D
#define SIPC_GPRS_FORCE_DATA_DORMANT 0x0E
#define SIPC_GPRS_PIN_CONTROL 0x0F
#define SIPC_GPRS_GPRS_CALL_STATUS 0x10
#define SIPC_GPRS_GPRS_PORT_LIST 0x11
#define SIPC_GPRS_LTE_QOS_PROFILE 0x12
#define SIPC_GPRS_LTE_ATTACH_APN_INFO 0x14
#define SIPC_GPRS_EPDG_HANDOVER 0x15
#define SIPC_GPRS_EPDG_STATUS 0x16
#define SIPC_GPRS_FD_INFORMATION 0x17
#define SIPC_GPRS_LTE_CA_STATUS 0x19
#define SIPC_GPRS_GPRS_BACK_OFF_TIMER_T3396 0x1A
#define SIPC_GPRS_SET_APN_INFO 0x1B
#define SIPC_GPRS_TRAFFIC_CHANNEL_STATUS 0x1C
#define SIPC_GPRS_IMS_TEST_MODE_STATUS 0x21
// Sub CMD for General Resp
#define SIPC_GEN_RSP 0x01
// MSG TYPE
#define EXE 0x01
#define GET 0x02
#define SET 0x03
#define CNF 0x04
#define EVT 0x05
#define IND 0x01
#define RSP 0x02
#define NTF 0x03typedef struct sipcMessage_t
{u16 length;u8 msgSeq;u8 ackSeq;u8 mainCmd;u8 subCmd;u8 cmdType;u8 parameter[SIPCMSG_PARAM_SIZE];
}sipcMessage;// TX MSG and RX MSG
u8 tx_msg_count = 0x01;
u8 rx_msg_count = 0x01;int stop = 0;   //alarm flag//split with the space
int split(u8 line[], u8 temp[MAX][MAX])
{int i = 0 ;int j = 0;int k = 0;for(i = 0; i < strlen(line); i++){if(line[i] == '\r' || line[i] == '\n' || line[i] == '\0'){break;}if(line[i] != ' '){temp[j][k] = line[i];k++;}if(line[i] == ' ' && line[i+1] != ' '){j++;k = 0;}        }return j+1;
}void padding(u8 line[], sipcMessage *sipc)
{u8  temp[MAX][MAX] = {0};u8 mainCmd[MAX] = "";u8 subCmd[MAX] = "";u8 cmdType[MAX] = "";split(line, temp);            if(line[0] == 'T' && line[1] == 'X'){stpcpy(mainCmd, temp[1]);stpcpy(subCmd, temp[2]);stpcpy(cmdType, temp[3]);     }if(line[0] == 'R' && line[1] == 'X'){stpcpy(mainCmd, temp[2]);stpcpy(subCmd, temp[3]);stpcpy(cmdType, temp[4]);        }//main CMDif(strcmp(mainCmd, "SIPC_MAIN_CMD_PWR") == 0){sipc->mainCmd = SIPC_MAIN_CMD_PWR;}else if(strcmp(mainCmd, "SIPC_MAIN_CMD_DISP") == 0){sipc->mainCmd = SIPC_MAIN_CMD_DISP;}else if(strcmp(mainCmd, "SIPC_MAIN_CMD_NET") == 0){sipc->mainCmd = SIPC_MAIN_CMD_NET;}else if(strcmp(mainCmd, "SIPC_MAIN_CMD_GPRS") == 0){sipc->mainCmd = SIPC_MAIN_CMD_GPRS;}else if(strcmp(mainCmd, "SIPC_MAIN_CMD_GEN") == 0){sipc->mainCmd = SIPC_MAIN_CMD_GEN;}else{sipc->mainCmd = ' ';}//sub CMDif(strcmp(subCmd, "SIPC_NET_PREFERRED_PLMN") == 0){sipc->subCmd = SIPC_NET_PREFERRED_PLMN;}else if(strcmp(subCmd, "SIPC_NET_PLMN_SELECTION") == 0){sipc->subCmd = SIPC_NET_PLMN_SELECTION;}else if(strcmp(subCmd, "SIPC_NET_SERVING_NETWORK") == 0){sipc->subCmd = SIPC_NET_SERVING_NETWORK;}else if(strcmp(subCmd, "SIPC_NET_PLMN_LIST") == 0){sipc->subCmd = SIPC_NET_PLMN_LIST;}else if(strcmp(subCmd, "SIPC_NET_NETWORK_REGISTRATION") == 0){sipc->subCmd = SIPC_NET_NETWORK_REGISTRATION;}else if(strcmp(subCmd, "SIPC_NET_SUBSCRIBER_NUM") == 0){sipc->subCmd = SIPC_NET_SUBSCRIBER_NUM;}else if(strcmp(subCmd, "SIPC_NET_BAND_SELECTION") == 0){sipc->subCmd = SIPC_NET_BAND_SELECTION;}else if(strcmp(subCmd, "SIPC_NET_SERVICE_DOMAIN_CFG ") == 0){sipc->subCmd = SIPC_NET_SERVICE_DOMAIN_CFG;}else if(strcmp(subCmd, "SIPC_NET_POWER_ON_ATTACH_CFG") == 0){sipc->subCmd = SIPC_NET_POWER_ON_ATTACH_CFG;}else if(strcmp(subCmd, "SIPC_NET_MODE_SELECT") == 0){sipc->subCmd = SIPC_NET_MODE_SELECT;}else if(strcmp(subCmd, "SIPC_NET_ACQUISITION_ORDER ") == 0){sipc->subCmd = SIPC_NET_ACQUISITION_ORDER ;}else if(strcmp(subCmd, "SIPC_NET_NETWORK_IDENTITY ") == 0){sipc->subCmd = SIPC_NET_NETWORK_IDENTITY ;}else if(strcmp(subCmd, "SIPC_NET_HANDOFF_DATA_CONNECTION") == 0){sipc->subCmd = SIPC_NET_HANDOFF_DATA_CONNECTION;}else if(strcmp(subCmd, "SIPC_NET_CELL_INFORMATION") == 0){sipc->subCmd = SIPC_NET_CELL_INFORMATION;}else if(strcmp(subCmd, "SIPC_NET_RAT_INFO_EMERGENCY") == 0){sipc->subCmd = SIPC_NET_RAT_INFO_EMERGENCY;}else if(strcmp(subCmd, "SIPC_NET_CSG_SEARCH") == 0){sipc->subCmd = SIPC_NET_CSG_SEARCH;}else if(strcmp(subCmd, "SIPC_NET_DUAL_STANBY_PREFERENCE") == 0){sipc->subCmd = SIPC_NET_DUAL_STANBY_PREFERENCE;}else if(strcmp(subCmd, "SIPC_NET_DOMAIN_SPECIFIC_RESTRICT") == 0){sipc->subCmd = SIPC_NET_DOMAIN_SPECIFIC_RESTRICT;}else if(strcmp(subCmd, "SIPC_NET_ACB_INFORMATION") == 0){sipc->subCmd = SIPC_NET_ACB_INFORMATION;}else if(strcmp(subCmd, "SIPC_NET_SSAC_INFORMATION") == 0){sipc->subCmd = SIPC_NET_SSAC_INFORMATION;}else if(strcmp(subCmd, "SIPC_NET_VOWIFI_HO_THRESHOLD") == 0){sipc->subCmd = SIPC_NET_VOWIFI_HO_THRESHOLD;}else if(strcmp(subCmd, "SIPC_NET_LTE_BAND_PRIORITY") == 0){sipc->subCmd = SIPC_NET_LTE_BAND_PRIORITY;}else if(strcmp(subCmd, "SIPC_NET_LTE_ROAMING") == 0){sipc->subCmd = SIPC_NET_LTE_ROAMING;}else if(strcmp(subCmd, "SIPC_NET_LTE_CA") == 0){sipc->subCmd = SIPC_NET_LTE_CA;}else if(strcmp(subCmd, "SIPC_NET_VARIOUS_NAS_TIMERS") == 0){sipc->subCmd = SIPC_NET_VARIOUS_NAS_TIMERS;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_POWER_UP") == 0){sipc->subCmd = SIPC_PWR_PHONE_POWER_UP;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_POWER_OFF") == 0){sipc->subCmd = SIPC_PWR_PHONE_POWER_OFF;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_RESET") == 0){sipc->subCmd = SIPC_PWR_PHONE_RESET;}else if(strcmp(subCmd, "SIPC_PWR_BATTERY_STATUS") == 0){sipc->subCmd = SIPC_PWR_BATTERY_STATUS;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_UNDEFINED_5 ") == 0){sipc->subCmd = SIPC_PWR_PHONE_UNDEFINED_5 ;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_UNDEFINED_6") == 0){sipc->subCmd = SIPC_PWR_PHONE_UNDEFINED_6;}else if(strcmp(subCmd, "SIPC_PWR_PHONE_STATE") == 0){sipc->subCmd = SIPC_PWR_PHONE_STATE;}else if(strcmp(subCmd, "SIPC_DISP_ICON_INFO") == 0){sipc->subCmd = SIPC_DISP_ICON_INFO;}else if(strcmp(subCmd, "SIPC_DISP_RSSI_INFO") == 0){sipc->subCmd = SIPC_DISP_RSSI_INFO ;}else if(strcmp(subCmd, "SIPC_GPRS_DEFINE_PDP_CONTEXT") == 0){sipc->subCmd = SIPC_GPRS_DEFINE_PDP_CONTEXT;}else if(strcmp(subCmd, "SIPC_GPRS_QOS_PROFILE") == 0){sipc->subCmd = SIPC_GPRS_QOS_PROFILE;}else if(strcmp(subCmd, "SIPC_GPRS_PS_ATTACH_DETACH") == 0){sipc->subCmd = SIPC_GPRS_PS_ATTACH_DETACH;}else if(strcmp(subCmd, "SIPC_GPRS_PDP_CONTEXT_ACT_DEACT") == 0){sipc->subCmd = SIPC_GPRS_PDP_CONTEXT_ACT_DEACT;}else if(strcmp(subCmd, "SIPC_GPRS_ENTER_DATA_STATE") == 0){sipc->subCmd = SIPC_GPRS_ENTER_DATA_STATE;}else if(strcmp(subCmd, "SIPC_GPRS_SHOW_PDP_ADDRESS") == 0){sipc->subCmd = SIPC_GPRS_SHOW_PDP_ADDRESS;}else if(strcmp(subCmd, "SIPC_GPRS_MOBILE_STATION_CLASS") == 0){sipc->subCmd = SIPC_GPRS_MOBILE_STATION_CLASS;}else if(strcmp(subCmd, "SIPC_GPRS_3G_QOS_PROFILE") == 0){sipc->subCmd = SIPC_GPRS_3G_QOS_PROFILE;}else if(strcmp(subCmd, "SIPC_GPRS_MULTIPLE_PDP_IP") == 0){sipc->subCmd = SIPC_GPRS_MULTIPLE_PDP_IP;}else if(strcmp(subCmd, "SIPC_GPRS_DEFINE_SECONDARY_PDP_CONTEXT") == 0){sipc->subCmd = SIPC_GPRS_DEFINE_SECONDARY_PDP_CONTEXT;}else if(strcmp(subCmd, "SIPC_GPRS_TRAFFIC_FLOW_TEMPLATE") == 0){sipc->subCmd = SIPC_GPRS_TRAFFIC_FLOW_TEMPLATE;}else if(strcmp(subCmd, "SIPC_GPRS_HSDPA_STATUS") == 0){sipc->subCmd = SIPC_GPRS_HSDPA_STATUS;}else if(strcmp(subCmd, "SIPC_GPRS_CURRENT_SESSION_DATA_COUNTER") == 0){sipc->subCmd = SIPC_GPRS_CURRENT_SESSION_DATA_COUNTER;}else if(strcmp(subCmd, "SIPC_GPRS_FORCE_DATA_DORMANT") == 0){sipc->subCmd = SIPC_GPRS_FORCE_DATA_DORMANT;}else if(strcmp(subCmd, "SIPC_GPRS_PIN_CONTROL") == 0){sipc->subCmd = SIPC_GPRS_PIN_CONTROL;}else if(strcmp(subCmd, "SIPC_GPRS_GPRS_CALL_STATUS") == 0){sipc->subCmd = SIPC_GPRS_GPRS_CALL_STATUS;}else if(strcmp(subCmd, "SIPC_GPRS_GPRS_PORT_LIST") == 0){sipc->subCmd = SIPC_GPRS_GPRS_PORT_LIST;}else if(strcmp(subCmd, "SIPC_GPRS_LTE_QOS_PROFILE") == 0){sipc->subCmd = SIPC_GPRS_LTE_QOS_PROFILE;}else if(strcmp(subCmd, "SIPC_GPRS_LTE_ATTACH_APN_INFO") == 0){sipc->subCmd = SIPC_GPRS_LTE_ATTACH_APN_INFO;}else if(strcmp(subCmd, "SIPC_GPRS_EPDG_HANDOVER") == 0){sipc->subCmd = SIPC_GPRS_EPDG_HANDOVER;}else if(strcmp(subCmd, "SIPC_GPRS_EPDG_STATUS") == 0){sipc->subCmd = SIPC_GPRS_EPDG_STATUS;}else if(strcmp(subCmd, "SIPC_GPRS_FD_INFORMATION") == 0){sipc->subCmd = SIPC_GPRS_FD_INFORMATION;}else if(strcmp(subCmd, "SIPC_GPRS_LTE_CA_STATUS") == 0){sipc->subCmd = SIPC_GPRS_LTE_CA_STATUS;}else if(strcmp(subCmd, "SIPC_GPRS_GPRS_BACK_OFF_TIMER_T3396") == 0){sipc->subCmd = SIPC_GPRS_GPRS_BACK_OFF_TIMER_T3396;}else if(strcmp(subCmd, "SIPC_GPRS_SET_APN_INFO") == 0){sipc->subCmd = SIPC_GPRS_SET_APN_INFO;}else if(strcmp(subCmd, "SIPC_GPRS_TRAFFIC_CHANNEL_STATUS") == 0){sipc->subCmd = SIPC_GPRS_TRAFFIC_CHANNEL_STATUS;}else if(strcmp(subCmd, "SIPC_GPRS_IMS_TEST_MODE_STATUS") == 0){sipc->subCmd = SIPC_GPRS_IMS_TEST_MODE_STATUS;}else if(strcmp(subCmd, "SIPC_GEN_RSP") == 0){sipc->subCmd = SIPC_GEN_RSP;}else{sipc->subCmd = ' ';}//CMD Typeif(strcmp(cmdType, "EXE") == 0){sipc->cmdType = EXE;}else if(strcmp(cmdType, "GET") == 0){sipc->cmdType = GET;}else if(strcmp(cmdType, "SET") == 0){sipc->cmdType = SET;}else if(strcmp(cmdType, "CNF") == 0){sipc->cmdType = CNF;}else if(strcmp(cmdType, "EVT") == 0){sipc->cmdType = EVT;}else if(strcmp(cmdType, "IND") == 0){sipc->cmdType = IND;}else if(strcmp(cmdType, "RSP") == 0){sipc->cmdType = RSP;}else if(strcmp(cmdType, "NTF") == 0){sipc->cmdType = NTF;}else{sipc->cmdType = ' ';}
}void alarmhandle(int sig)
{    stop = 1;
}void set_alarm(unsigned int time)
{int ret ;struct itimerval tick;tick.it_value.tv_sec = time;  tick.it_value.tv_usec = 0;tick.it_interval.tv_sec  = 0; tick.it_interval.tv_usec = 0;signal(SIGALRM, alarmhandle);ret = setitimer(ITIMER_REAL, &tick, NULL);if(ret != 0){printf("Set timer error.\n");return ;}printf("Wait!\n");
}int Highlight(u8 data[MAX][MAX], sipcMessage *sipc_recv)
{int i, j;sipcMessage sipc; u8 temp[MAX][MAX] = {0};for(i = 0; i < MAX; i++){split(data[i], temp);if(strcmp(temp[0], "HIGHLIGHT") == 0){for(j = i; j < MAX; j++){padding(data[j], &sipc);if(sipc.mainCmd == sipc_recv->mainCmd && sipc.subCmd == sipc_recv->subCmd){return 1;}if(strcmp(data[j], "") == 0){return 0;}}}}return 0;
}void main(void)
{sipcMessage sipc;  //from senario.txtsipcMessage sipc_recv; //from driver FILE * fp;   //.txt fileint fd;     //driveru8  data[MAX][MAX] = {0};u8  temp[MAX][MAX] = {0};u8  previous[MAX][MAX] = {0};u8 *line = NULL;size_t len = 0;ssize_t read;int i = 0;int j = 0;int m = 0;int n = 0;int number;  //senario file total lineunsigned int sec;  int pre = -1; //previous CMD int ret;memset(&sipc, 0, sizeof(sipcMessage));//read senario.txtfp = fopen("./senario.txt", "r");    if(fp == NULL){exit(EXIT_FAILURE);}while((read = getline(&line, &len, fp)) != -1){if(read == 2){stpcpy(data[i], "");}else if(line[0] == '/' && line[1] == '/'){continue;}else{stpcpy(data[i], line);}           i++;      }number = i ;printf("number = %d \n", number);for(i = 0 ; i < number; i++){if(strcmp(data[i], "") == 0)continue;printf("data[%d] = %s", i, data[i]);   //printf("data[%d][0] = %c \t data[%d][1] = %c \n", i, data[i][0], i, data[i][1]);}printf("\n");if(line)free(line);fclose(fp);            //write result.txt and padding sipcMessage  fp = fopen("./result.txt", "w+"); if(fp == NULL){exit(EXIT_FAILURE);}fd = open("/dev/my_misc_dev", O_RDWR);if(fd != -1){exit(EXIT_FAILURE);}i = 0; while(i < number){//Send CMDif(data[i][0] == 'T' && data[i][1] == 'X'){//put into result filefwrite(data[i], strlen(data[i]), 1, fp);n = 0;for(j = i+1; j < number; j++){if(strcmp(data[j], "") == 0){break;}else{fwrite(data[j], strlen(data[j]), 1, fp);if(n > 0){sipc.parameter[n] = ' ';n++;}                        // padding sipcMessage  parameter                   for(m = 0; m < strlen(data[j]); m++, n++){                      if(data[j][m] == '\n' ||data[j][m] == '\r'){break;}else{sipc.parameter[n] = data[j][m];}                           }}  }           //padding sipcMessage                   sipc.msgSeq = tx_msg_count;sipc.ackSeq = 0xFF;           //default 0xFF   tx_msg_count ++;padding(data[i], &sipc);          pre = i;i = j;    memset(&sipc, 0, sizeof(sipcMessage));//send to driver#ifndef DEBUGwrite(fd, (void *)&sipc, sizeof(sipc));#endiffwrite("\r\n", 1, 2, fp);         continue;}// Receive CMDif(data[i][0] == 'R' && data[i][1] == 'X'){         //padding sipcMessage parameter n = 0;for(j = i+1; j < number; j++){if(strcmp(data[j], "") == 0){break;}else{if(n > 0){sipc.parameter[n] = ' ';n++;}for(m = 0; m < strlen(data[j]); m++, n++){                      if(data[j][m] == '\n' ||data[j][m] == '\r'){break;}else{sipc.parameter[n] = data[j][m];}                           }}  }           //padding sipcMessagesipc.msgSeq = rx_msg_count;rx_msg_count ++;padding(data[i], &sipc);                     //set alarmsplit(data[i], temp);sec = atol(temp[1]);printf("sec = %d \n", sec);         set_alarm(sec); #ifndef DEBUG               while(1){if (stop == 1) break;                    ret = read(fd, (void *)&sipc_recv, sizeof(sipc_recv));                 }               #elsewhile(1){if(stop == 1){break;}                   }//构造假的sipc_recv, 未完待续??    //如果上一条是TX命令,则构造应该接收的RX命令;如果上一条是RX命令,则根据本条命令构造RX  本程序只给出根据GET命令构造的RX的response命令//get-response    set-general response  execute-general responsesplit(data[pre], previous);if(strcmp(previous[0], "TX") == 0){if(strcmp(previous[3], "GET") == 0)    //根据GET命令,构造response命令{sipc_recv.msgSeq = rx_msg_count - 1;sipc_recv.ackSeq = tx_msg_count - 1; //如果前一个命令是TX类型的,那么最新的TX msg sequence 就是本条RX命令的ack sequencesipc_recv.mainCmd = SIPC_MAIN_CMD_GEN;sipc_recv.subCmd = SIPC_GEN_RSP;sipc_recv.cmdType = RSP;rx_msg_count++;}  //需要增加SET等命令回应命令   未完待续??ret = 5;}//如果上一条命令是RX类型的,就根据本条RX命令,去构造sipc_recv if(strcmp(previous[0], "RX") == 0){sipc_recv.msgSeq = rx_msg_count - 1;sipc_recv.ackSeq = 0xFF;sipc_recv.mainCmd = sipc.mainCmd;sipc_recv.subCmd = sipc.subCmd;sipc_recv.cmdType = sipc.cmdType;   strcpy(sipc_recv.parameter, sipc.parameter);rx_msg_count++;ret = 5;}         #endifif(strcmp(sipc_recv.parameter, "") != 0)  {strcat(sipc_recv.parameter, "\r\n");}if(ret < 1){//Highlightif(Highlight(data, &sipc_recv)){u8 error[MAX] = "ERROR : There is no RX MSG"; fwrite(error, strlen(error), 1, fp);fwrite(data[i], strlen(data[i]), 1, fp);fwrite(sipc_recv.parameter, strlen(sipc_recv.parameter), 1, fp);}else{u8 error[MAX] = "ERROR : Receive nothing"; fwrite(error, strlen(error), 1, fp);}}else{if(sipc_recv.mainCmd == sipc.mainCmd && sipc_recv.subCmd == sipc.subCmd){fwrite(data[i], strlen(data[i]), 1, fp);fwrite(sipc_recv.parameter, strlen(sipc_recv.parameter), 1, fp);                  }else{u8 error[MAX] = "ERROR : Data error"; fwrite(error, strlen(error), 1, fp);}            }           pre = i;i = j;    ret = 0 ;memset(&sipc, 0, sizeof(sipcMessage));memset(&sipc_recv, 0, sizeof(sipcMessage));fwrite("\r\n", 2, 1, fp);continue;}i = i + 1 ;       }   exit(EXIT_SUCCESS);
}

readme.txt

已完成:

1.读取senario.txt文件
2.切割每条命令。根据senario.txt文件中的空格符,把整条命令切割。
3.将每条命令填充到结构体sipcMessage中
4.将处理结果写回result.txt文件
5.对于HightLight类型的命令特殊处理
6.等待接收时间的处理(设定闹钟)

待完善:

1.根据TX的命令类型构造对应的回复命令,本程序给出了TX-GET类型命令回复命令RX,但是TX其它类型的(比如SET等)待完成
2.应用程序收到RX后,如何判定此命令是正确的。此判定条件待完成。
3.用线程实现

【Linux c】sipc相关推荐

  1. 【Qt开发】【VS开发】【Linux开发】OpenCV、Qt-MinGw、Qt-msvc、VS2010、VS2015、Ubuntu Linux、ARM Linux中几个特别容易混淆的内容...

    [Qt开发][VS开发][Linux开发]OpenCV.Qt-MinGw.Qt-msvc.VS2010.VS2015.Ubuntu Linux.ARM Linux中几个特别容易混淆的内容 标签:[Qt ...

  2. 【Linux笔记】CentOS下找不到eth0设备的解决方法

    [Linux笔记]CentOS下找不到eth0设备的解决方法 参考文章: (1)[Linux笔记]CentOS下找不到eth0设备的解决方法 (2)https://www.cnblogs.com/ly ...

  3. 【Linux 内核】线程调度示例一 ② ( 获取指定调度策略的最大和最小优先级 | 代码示例 )

    文章目录 一.获取指定调度策略的最大和最小优先级函数 二.获取指定调度策略的最大和最小优先级代码示例 一.获取指定调度策略的最大和最小优先级函数 Linux 内核中 , 通过下面 222 个函数 , ...

  4. 【Linux 内核】进程优先级与调度策略 ② ( 获取调度策略对应的进程优先级函数 | sched_get_priority_max 函数 | sched_get_priority_min 函数 )

    文章目录 一.获取进程优先级函数 二.调度策略参数 三.进程优先级说明 在上一篇博客 [Linux 内核]进程优先级与调度策略 ① ( SCHED_FIFO 调度策略 | SCHED_RR 调度策略 ...

  5. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )

    文章目录 一.调度类 ( 停机调度类 | 限期调度类 | 实时调度类 | 公平调度类 | 空闲调度类 ) 二. 实时调度类 rt_sched_class 源码 一.调度类 ( 停机调度类 | 限期调度 ...

  6. 【Linux 内核】实时调度类 ② ( 实时调度实体 sched_rt_entity 源码分析 | run_list、timeout、watchdog_stamp、time_slice 字段 )

    文章目录 一.sched_rt_entity 源码分析 1.run_list 字段 2.timeout 字段 3.watchdog_stamp 字段 4.time_slice 字段 5.back 字段 ...

  7. 【Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )

    文章目录 一.进程分类 ( 实时进程 | 普通进程 ) 二.Linux 内核调度策略 1.SCHED_FIFO 调度策略 2.SCHED_RR 调度策略 三.实时调度实体 sched_rt_entit ...

  8. 【Linux 内核】CFS 调度器 ⑤ ( CFS 调度器类 fair_sched_class 源码 | next 赋值 | enqueue_task 赋值 | dequeue_task 赋值 )

    文章目录 一.调度器类 sched_class 简介 二.CFS 调度器类源码 三.next 赋值 四.enqueue_task 赋值 五.dequeue_task 赋值 一.调度器类 sched_c ...

  9. 【Linux 内核】CFS 调度器 ④ ( 调度子系统组件模块 | 主调度器、周期性调度器 | 调度器类 )

    文章目录 一.调度子系统组件模块 二.主调度器.周期性调度器 三.调度器类 一.调度子系统组件模块 调度器 需要对 被调度的进程 进行 排序 和 调度管理 , 进程管理过程需要 调度器 的 组件模块 ...

  10. 【Linux 内核】CFS 调度器 ① ( CFS 完全公平调度器概念 | CFS 调度器虚拟时钟 Virtual Runtime 概念 | 四种进程优先级 | 五种调度类 )

    文章目录 一.CFS 调度器概念 ( 完全公平调度器 ) 二.CFS 调度器虚拟时钟概念 ( Virtual Runtime ) 三.进程优先级 ( 调度优先级 | 静态优先级 | 正常优先级 | 实 ...

最新文章

  1. muduo之BlockingQueue
  2. 第一章 自定义MVC框架
  3. Android中的坐标系以及获取坐标的方法
  4. 【python】Flask视图
  5. python数据结构中文版_Python官方入门教程_中文版_5.数据结构
  6. java10 WeakHashMap
  7. 解决Ajax异步请求中传数组参数,后台无法接收问题
  8. javascript设计模式-装饰者模式
  9. 【合金装备xp热门主题】
  10. MySQL5.7源码在MacOS+Clion上的单步调试
  11. matlab 对数回归,matlab的对数回归
  12. chrome extensions 中的交互
  13. 生活总结[置顶] 程序员的奋斗史(十八)——人活着,只是一种态度
  14. 10驾校科目一考试系统——窗口交互
  15. Failed to open \EFI\BOOT\MMX64.efi -Not Found
  16. 五洲制冷中央空调西门子S7-200 PLC控制系统程序 PLC和屏程序
  17. 中小型企业如何实现数字化转型?看完这5点你就明白了
  18. 孩子为什么要学JAVA---Java学习规划
  19. 这7个翻译神器超级猛!网页翻译、文档翻译,无所不能
  20. 1-div上下左右居中

热门文章

  1. 英语发音规则---ea字母组合发音规律
  2. saltstack(九)returner
  3. java7 diamond_java7新特性之Diamond syntax
  4. MySQL学习---作业(1)
  5. Xmarks被GFW屏蔽后,怎么同步?
  6. 笔记本电脑光驱位置装固态硬盘流程
  7. 樊登读书会终身成长读后感_樊登读书会《终身成长》读后感
  8. mpeg4 码流格式及判断关键帧
  9. javascript 单行内容连续滚动,允许停留
  10. 像模拟人生的 java游戏下载_我的世界1.7.2模拟人生整合包