使用消息队列实现的2个终端之间的互相聊天 并使用信号控制消息队列的读取方式: 当键盘按ctrl+c的时候,切换消息读取方式,一般情况为读取指定编号的消息,按ctrl+c之后,指定的编号不读取,读取其他所有编号的消息
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
struct message{
long type;
char text[256];
};
int main(int argc, const char *argv[])
{
int msqid;
struct message msg;
// 打开或创建消息队列
if ((msqid = msgget(1234, IPC_CREAT | 0666)) == -1)
{
perror("msgget");
return 1;
}
while (1)
{
// 输入要发送的消息
printf("输入信息:");
fgets(msg.text, 256, stdin);
msg.type = 1;
// 发送消息
if (msgsnd(msqid, &msg, sizeof(struct message) - sizeof(long), 0) == -1)
{
perror("msgsnd");
return 1;
}
printf("消息已发送:%s\n", msg.text);
}
return 0;
}
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <pthread.h>
#include <semaphore.h>
#include <wait.h>
#include <signal.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <sys/socket.h>
#include <sys/ipc.h>
#include <sys/sem.h>
#include <semaphore.h>
#include <sys/msg.h>
#include <sys/shm.h>
#include <sys/un.h>
struct message{
long type;
char text[256];
};
int main(int argc, const char *argv[])
{
int msqid;
struct message msg;
// 打开消息队列
if ((msqid = msgget(1234,0666)) == -1)
{
perror("msgget");
return 1;
}
while (1)
{
// 接收消息
if (msgrcv(msqid, &msg, sizeof(struct message) - sizeof(long), 1, 0) == -1)
{
perror("msgrcv");
return 1;
}
printf("收到的消息%s\n",msg.text);
}
return 0;
}