• 大小: 459KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: 其他
  • 标签: IPC  

资源简介

使用消息队列与共享内存完成一个简单的终端聊天程序

资源截图

代码片段和文件信息

#include “public.h“

void *login_ptr = NULL;
void signal_login(int signo)
{
int i = 0;
printf(“new user login\n“);
char login_head[100] = {0};
memcpy(login_headlogin_ptr100);
printf(“current online users:\n“);
for (i = 0;i < 100;i++)
{
//表示被使用,有数据
if (login_head[i] == 1)
{
int pos = 100 + sizeof(int) * i;
int pid = 0;
  memcpy(&pid(char*)login_ptr + possizeof(int));
  printf(“ %d “pid);
}
}
  printf(“\n“);
}

int main()
{
signal(SIGUSR1signal_login);
//登录消息
//创建一个登录消息队列
int msg_login_id = msgget((key_t)0001IPC_CREAT | 0766);
if (msg_login_id < 0)
{
printf(“create msg error!“);
return 0;
}

//打开在线用户共享内存

int shmid = shmget((key_t)123400);
if (shmid < 0)
{
printf(“open shm error!“);
}

//映射逻辑地址
login_ptr = shmat(shmidNULL0);

LOGIN_T login;
memset(&login0sizeof(LOGIN_T));

login.type = 1;//表示登录
login.pid  = getpid();

//发送登录数据
int ret = msgsnd(msg_login_id(void*)&loginsizeof(LOGIN_T)-sizeof(long)0);
if (ret < 0)
{
printf(“send login msg error!“);
return 0;
}
while (1)
{
sleep(1);
}
return 0;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2016-08-05 00:10  IPC_chat\
     目录           0  2016-08-05 10:29  IPC_chat\IPC_chat\
     文件     1567744  2016-08-05 10:29  IPC_chat\IPC_chat.ncb
     文件         890  2016-08-05 00:10  IPC_chat\IPC_chat.sln
     文件       11264  2016-08-05 10:29  IPC_chat\IPC_chat.suo
     文件        1202  2016-08-05 10:29  IPC_chat\IPC_chat\client.cpp
     文件        4042  2016-08-05 08:56  IPC_chat\IPC_chat\IPC_chat.vcproj
     文件        1415  2016-08-05 10:29  IPC_chat\IPC_chat\IPC_chat.vcproj.lenovo-PC.lenovo.user
     文件         385  2016-08-05 08:58  IPC_chat\IPC_chat\public.h
     文件       29016  2016-08-05 10:25  IPC_chat\IPC_chat\server
     文件        1520  2016-08-05 10:29  IPC_chat\IPC_chat\server.cpp

评论

共有 条评论