linux共享内存聊天室

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入

  linux共享内存聊天室

  共享内存为是一种非常有效,速度快,适宜各进程间传递较大的数据。但是,共享内存不会随着程序终止而释放,须用shmctl共享内存区释放,否则,会一直残留在系统内存区中,影响运行效率。

  本实践中,要实现聊天室的功能,开始时建立单次显示,覆盖共享内存的方法,发现输出的死循环难以控制,缺乏阻塞,后来改用数组存储,将共享内存划分成N个子区间,多终端共同读写时,子区间的移位难以控制。

  #include<stdio.h>

  #include<unistd.h>

  #include<sys/types.h>

  #include<sys/stat.h>

  #include<stdlib.h>

  #include<string.h>

  #include<sys/ipc.h>

  #include<sys/shm.h>

  #include<stdio.h>

  #define KEY 123456

  #define SIZE 10240

  #define MYKEY 1346766

  #define IKEY 13467669

  int main()

  {

  int shmid;

  char *shmname; //定义输入姓名的共享内存

  int shmid2;

  char *shmstr; //定义输入语句的共享内存

  int j=0;

  int i=0;

  char temp[100];

  shmid = shmget(IKEY, SIZE, IPC_CREAT | 0600);

  if(shmname= (char *) shmat(shmid, 0, 0)); //连接共享共存

  if(shmid==-1)

  printf(”shmid error”);

  shmid2 = shmget(MYKEY, SIZE, IPC_CREAT | 0600);

  shmstr= (char *) shmat(shmid2, 0, 0);

  if(shmid2==-1)

  printf(”shmid2 error”);

  memset(shmname,0,SIZE);

  memset(shmstr,0,SIZE);

  char myname[10];

  printf(”请输入你的姓名:”);

  scanf(”%s”,myname); //输入本地用户名

  printf(”:%s 已经成功登录\n”,myname);

  pid_t id;

  if((id=fork())==-1) printf(”fork error”);

  //printf(”here 1″);

  if(id==0) //子进程用于输出

  {

  while(1)

  {

  if(*(shmstr+j*100)!=0)

  {

  printf(”第%d句”,j);

  printf(”%s 说:”,shmname);

  printf(”%s”,(shmstr+j*100)) ;

  j++;

[1][2]

任何业绩的质变都来自于量变的积累。

linux共享内存聊天室

相关文章:

你感兴趣的文章:

标签云: