学生网站开发大赛,徐州建设网站公司,做net网站,建站网站免费消息队列完成进程间通信
#include myhead.h#define size sizeof(msg_ds)-sizeof(long) //正文大小//消息结构体
typedef struct
{long msgtype; //消息类型char data[1024]; //消息正文
}msg_ds;//创建子线程构造体
void *task1(void *arg)
{//创造第二个key值ke…消息队列完成进程间通信
#include myhead.h#define size sizeof(msg_ds)-sizeof(long) //正文大小//消息结构体
typedef struct
{long msgtype; //消息类型char data[1024]; //消息正文
}msg_ds;//创建子线程构造体
void *task1(void *arg)
{//创造第二个key值key_t key1;if((key1ftok(/,f))-1){perror(ftok error);}//创建第二个消息队列int msgid1;if((msgid1msgget(key1,IPC_CREAT|0664))-1){perror(msgget error);}//4、从消息队列中取数据msg_ds msg1; while(1){//从消息队列中取数据//第一个0表示取消息的类型每次都是取第一个//第二个0表示阻塞方式从消息队列中取数据if(msgrcv(msgid1,msg1,size,0,0)-1){perror(msgrcv error);}if(strcmp(msg1.data,quit)0){break;}printf(rcv: %s\n, msg1.data);}//删除消息队列msgctl(msgid1,IPC_RMID,NULL);
}
int main(int argc, const char *argv[])
{//1、创建key值key_t key;if((keyftok(/,k))-1){perror(fotk error);return -1;}//2、创造消息队列int msgid;if((msgidmsgget(key,IPC_CREAT|0664))-1){perror(msgget error);return -1;}//3、主线程向队列中发送数据msg_ds msg{.msgtype100};//定义一个线程号pthread_t tid;//创建一个子线程if(pthread_create(tid,NULL,task1,NULL)){printf(子线程创建失败\n);return -1;}while(1){//printf(请输入消息的内容);fgets(msg.data,sizeof(msg.data),stdin); //向终端进程中输入数据msg.data[strlen(msg.data)-1]\0; //将最后一个字符\n变成\0//将消息发到消息队列中if(msgsnd(msgid,msg,size,0)-1){perror(msgsnd error);return -1;}//当输入quit字符串时退出循环if(strcmp(msg.data,quit)0){break;}}//删除消息队列msgctl(msgid,IPC_RMID,NULL);return 0;
}
#include myhead.h#define size sizeof(msg_ds)-sizeof(long) //正文大小//消息结构体
typedef struct
{long msgtype; //消息类型char data[1024]; //消息正文
}msg_ds;//创建子线程构造体
void *task1(void *arg)
{//创造第二个key值key_t key1;if((key1ftok(/,f))-1){perror(ftok error);}//创建第二个消息队列int msgid1;if((msgid1msgget(key1,IPC_CREAT|0664))-1){perror(msgget error);}//4、从消息队列中取数据msg_ds msg1{.msgtype100}; //4、从消息队列中取数据while(1){//printf(请输入消息的内容);fgets(msg1.data,sizeof(msg1.data),stdin); //向终端进程中输入数据msg1.data[strlen(msg1.data)-1]\0; //将最后一个字符\n变成\0//将消息发到消息队列中if(msgsnd(msgid1,msg1,size,0)-1){perror(msgsnd error);}//当输入quit字符串时退出循环if(strcmp(msg1.data,quit)0){break;}}//删除消息队列msgctl(msgid1,IPC_RMID,NULL);
}
int main(int argc, const char *argv[])
{//1、创建key值key_t key;if((keyftok(/,k))-1){perror(fotk error);return -1;}//2、创造消息队列int msgid;if((msgidmsgget(key,IPC_CREAT|0664))-1){perror(msgget error);return -1;}//3、主线程向队列中取数据msg_ds msg{.msgtype100};//定义一个线程号pthread_t tid;//创建一个子线程if(pthread_create(tid,NULL,task1,NULL)){printf(子线程创建失败\n);return -1;}while(1){//从消息队列中取数据//第一个0表示取消息的类型每次都是取第一个//第二个0表示阻塞方式从消息队列中取数据if(msgrcv(msgid,msg,size,0,0)-1){perror(msgrcv error);return -1;}if(strcmp(msg.data,quit)0){break;}printf(rcv: %s\n, msg.data);}//删除消息队列msgctl(msgid,IPC_RMID,NULL);return 0;
}