#include "include.h"
sem_t IPCSem;
#define SHM_PATH "/home/gec"
#define PROJ_ID 188
int Create_Shmat(void)
{
#if 0
/*step 0: 用ftok生成一个system v ipc key*/
key_t key = ftok(SHM_PATH, PROJ_ID);
if (key == -1)
{
perror("ftok error:");
return -1;
}
#endif
int shmid = 0;
shmid = shmget((key_t)12345,sizeof(MYShare),0666|IPC_CREAT);
return shmid;
}
char * Shmate_Mmap(int shmid,void *addr,int shmFlag)
{
return (char *)shmat(shmid,addr,shmFlag);
}
sem_t GetIPC_SystemV(void)
{
return IPCSem;
}
int IPC_SEMIint(sem_t *sem, int pshared, unsigned int value)
{
int ret = 0;
ret = sem_init(sem,pshared,value);
return ret;
}
int IPC_SEMWait(sem_t *sem)
{
return sem_wait(sem);
}
int IPC_SEMPost(sem_t *sem)
{
return sem_post(sem);
}
int IPC_SEMDestroy(sem_t *sem)
{
return sem_destroy(sem);
}
int ConstructMsg(char *cmd,MYShare *p)
{
char Cmd[16] = {0};
int SubCmd = 0;
int flag = 0;
p->FLAG = flag;
sscanf(cmd,"%s\t%d",Cmd,&SubCmd);
if(strcmp(Cmd,"MCommNew")==0)
{
p->CommCMD = NEW_DATA;
p->MainCMD = SEND_DATA;
p->FLAG = flag | 1<<1;
//p->MainSendCmdToCommFlag = 1;
}
else if(strcmp(Cmd,"MCommNo") == 0)
{
p->CommCMD = NO_DATA;
p->CommSubCmd = 0;
p->MainCMD = NO_DATA;
//p->MainSendCmdToCommFlag = 1;
}
else if(strcmp(Cmd,"MInbioNew") == 0)
{
p->InbioCMD = NEW_DATA;
p->MainCMD = SEND_DATA;
p->FLAG = flag | 1<<2;
//p->MainSendCmdToInbioFlag = 1;
}
else if(strcmp(Cmd,"MInbioCmd") == 0)
{
p->InbioCMD = NEW_CMD;
p->InbioSubCmd = SubCmd;
p->MainCMD = SEND_CMD;
//p->MainSendCmdToInbioFlag = 1;
}
else if(strcmp(Cmd,"MCommCmd") == 0)
{
p->CommCMD = NEW_CMD;
p->CommSubCmd = SubCmd;
p->MainCMD = SEND_CMD;
p->MainSendCmdToCommFlag = 1;
}
else if(!strcmp(Cmd,"CMainCmd") && p->CommCMD == SEND_CMD)
{
p->MainSubCmd = SubCmd;
p->MainCMD = NEW_CMD;
p->CommSendCmdToMainFlag = 1;
}
else if(!strcmp(Cmd,"CMainNew") && p->CommCMD == SEND_DATA)
{
p->MainCMD = NEW_DATA;
p->FLAG = flag | 1<<3;
//p->CommSendCmdToMainFlag = 1;
}
else if(!strcmp(Cmd,"IMainCmd") && p->InbioCMD == SEND_CMD)
{
p->MainSubCmd = SubCmd;
p->MainCMD = NEW_CMD;
p->InbioSendCmdToMainFlag = 1;
}
else if(!strcmp(Cmd,"IMainNew") && p->InbioCMD == SEND_DATA)
{
p->MainCMD = NEW_DATA;
p->FLAG = flag | 1<<5;
//p->InbioSendCmdToMainFlag = 1;
}
else
return 0;
return 1;
}
int ProcessNewData(MYShare *PShare)
{
if(PShare->FLAG & (1<<3))
{
printf("Main Get Data from Comm,Context: %s\n",PShare->buf);
PShare->CommCMD = 0;
PShare->MainCMD = 0;
//PShare->CommSendCmdToMainFlag = 0;
PShare->FLAG = 0;
}
else if(PShare->FLAG & (1<<5))
{
printf("Main Get Data from Inbio,Context: %s\n",PShare->buf);
PShare->MainCMD = 0;
PShare->InbioCMD = 0;
PShare->FLAG = 0;
//PShare->InbioSendCmdToMainFlag = 0;
}
else if(PShare->FLAG & (1<<2))
{
printf("Inbio Get Data from Main,Context: %s\n",PShare->buf);
PShare->MainCMD = 0;
PShare->InbioCMD = 0;
PShare->FLAG = 0;
}
else if(PShare->FLAG & (1<<1))
{
printf("Comm Get Data from Main,Context: %s\n",PShare->buf);
PShare->MainCMD = 0;
PShare->CommCMD = 0;
PShare->FLAG = 0;
}
else if(PShare->FLAG & (1<<4))
{
printf("Inbio Get Data from Comm,Context: %s\n",PShare->buf);
PShare->CommCMD = 0;
PShare->InbioCMD = 0;
PShare->FLAG = 0;
}
else if(PShare->FLAG & (1<<6))
{
printf("Comm Get Data from Inbio,Context: %s\n",PShare->buf);
PShare->CommCMD = 0;
PShare->InbioCMD = 0;
PShare->FLAG = 0;
}
memset(PShare->buf,0,sizeof(PShare->buf));
return 0;
}
int DoMsgProcess(char *data,MYShare* PShare,int CMD)
{
int ret = 0;
switch(CMD)
{
case NEW_DATA:
{
ProcessNewData(PShare);
break;
}
case NEW_CMD:
{
break;
}
case SEND_CMD:
{
printf("[Loenard %s %s] Main Send Cmd Successfully...\n",__DATE__,__TIME__);
break;
}
case SEND_DATA:
{
printf("[Loenard %s %s] Main Send Data Successfully...\n",__DATE__,__TIME__);
memcpy(PShare->buf,data,strlen(data)+1);
break;
}
case END_TRANSFER:
{
break;
}
default:
break;
}
return ret;
}
int ShowInternalWorld(void)
{
printf("------------ This World is Beautiful -------------\n");
printf(" 1、New data \n");
printf(" 2、New Cmd \n");
printf(" 3、Do Something \n");
printf(" 4、Exit \n");
printf(" Please Input Your Selection:\n");
return 0;
}
#define MAIN_FUNCTION
#ifdef MAIN_FUNCTION
int MainToInbiocomm(char *buf,char *data)
{
int Select = 0;
int subcmd = 0;
Input:
ShowInternalWorld();
scanf("%d",&Select);
switch(Select)
{
case 1:
snprintf(buf,24,"MInbioNew\t ");
sprintf(data,"Hello Inbiocomm, my name is Main.");
printf("------>Please Input 4 to exit.\n");
goto Input;
//break;
case 2:
//To Do:
/* 做命令和子命令的显示 */
subcmd = 21;
//Done
snprintf(buf,24,"MInbioCmd\t%d",subcmd);
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 3:
//To do:
printf("请自己在这里进行扩展,后续我会继续更新\n");
printf("------>Please Input 4 to exit.\n");
//Done
goto Input;
break;
case 4:
return EXIT_END;
default:
printf("------>Input Error.please input again.\n");
goto Input;
}
return 0;
}
int MainToComm(char *buf,char *data)
{
int Select = 0;
int subcmd = 0;
Input:
ShowInternalWorld();
scanf("%d",&Select);
switch(Select)
{
case 1:
snprintf(buf,24,"MCommNew\t ");
sprintf(data,"Hello Comm, my name is Main.");
printf("------>Please Input 4 to exit.\n");
goto Input;
//break;
case 2:
//To Do:
/* 做命令和子命令的显示 */
subcmd = 21;
//Done
snprintf(buf,24,"MCommCmd\t%d",subcmd);
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 3:
printf("请自己在这里进行扩展,后续我会继续更新\n");
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 4:
return EXIT_END;
default:
printf("------>Input Error.please input again.\n");
goto Input;
}
return 0;
}
#endif
#define INBIO_FUNCTION
#ifdef INBIO_FUNCTION
int InbiocommToMain(char *buf,char *data)
{
int Select = 0;
int subcmd = 0;
Input:
ShowInternalWorld();
scanf("%d",&Select);
switch(Select)
{
case 1:
snprintf(buf,24,"IMainNew\t ");
sprintf(data,"Hello Main, my name is Inbiocomm.");
printf("------>Please Input 4 to exit.\n");
goto Input;
//break;
case 2:
//To Do:
/* 做命令和子命令的显示 */
subcmd = 21;
//Done
snprintf(buf,24,"IMainCmd\t%d",subcmd);
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 3:
printf("请自己在这里进行扩展,后续我会继续更新\n");
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 4:
return EXIT_END;
default:
printf("------>Input Error.please input again.\n");
goto Input;
}
return 0;
}
int InbiocommToComm(char *buf,char *data)
{
int Select = 0;
int subcmd = 0;
Input:
ShowInternalWorld();
scanf("%d",&Select);
switch(Select)
{
case 1:
snprintf(buf,24,"ICommNew\t ");
sprintf(data,"Hello Comm, my name is Inbiocomm.");
printf("------>Please Input 4 to exit.\n");
goto Input;
//break;
case 2:
//To Do:
/* 做命令和子命令的显示 */
subcmd = 21;
//Done
snprintf(buf,24,"ICommCmd\t%d",subcmd);
printf("------>Please Input 4 to exit.\n");
goto Input;
break;
case 3:
printf("请自己在这里进行扩展,后续我会继续更新\n");
pr
没有合适的资源?快使用搜索试试~ 我知道了~
多进程交互
需积分: 11 16 下载量 47 浏览量
2018-02-27
15:40:14
上传
评论
收藏 4KB TGZ 举报
温馨提示
共6个文件
c:4个
h:1个
makefile:1个
这是一个有关于共享内存得多进程交互得小项目,它涉及到进程锁和单一文件夹的简易Makefile得编写,其中这只是一个框架,将多进程如何利用共享内存得方式进行数据得交互。其中是在共享内存得方式,需要进行加锁操作防止被占用错乱。
资源推荐
资源详情
资源评论
收起资源包目录
ShareMemory.tgz (6个子文件)
main.c 2KB
comm.c 2KB
inbiocomm.c 2KB
include.c 10KB
include.h 2KB
Makefile 690B
共 6 条
- 1
资源评论
twn_fly
- 粉丝: 2
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功