#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/shm.h>
#include "shmdata.c"
#include <string.h>
#define BUFFSIZE 2048
int main()
{
int running = 1;
void *shm = NULL;
struct shared_use_st * shared = NULL;
char buffer[BUFFSIZE + 1];
int shmid;
shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
shm = shmat(shmid,0,0);
if(shm == (void*)-1)
{
fprintf(stderr,"shmat failed\n");
exit(EXIT_FAILURE);
}
printf("\n memary attached at %d\n",(int)shm);
shared = (struct shared_use_st *)shm;
//shared->written = 0;
while(running)
{
while(shared->written == 1)
{
sleep(1);
printf("waitting...\n");
}
printf("Enter some text:\n");
fgets(buffer,BUFFSIZE,stdin);
strncpy(shared->text,buffer,TEXT_SZ);
/*if(shared->written != 0)
{
printf("you wrote : %s\n",shared->text);
sleep(rand()%3);*/
shared->written = 1;
if(strncmp(shared->text,"end",3) == 0)
running = 0;
// }
// else
// sleep(1);
}
if(shmdt(shm) == -1)
{
fprintf(stderr,"shmdt failed\n");
exit(EXIT_FAILURE);
}
/* if(shmctl(shmid,IPC_RMID,0) == -1)
{
fprintf(stderr,"stmctl failed\n");
exit(EXIT_FAILURE);
}*/
sleep(2);
exit(EXIT_SUCCESS);
return 0;
}
#define TEXT_SZ 2048
struct shared_use_st
{
int written;
char text[TEXT_SZ];
};
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/shm.h>
#include "shmdata.c"
#include <string.h>
int main()
{
int running = 1;
void *shm = NULL;
struct shared_use_st * shared;
int shmid;
shmid = shmget((key_t)1234,sizeof(struct shared_use_st),0666|IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr,"shmget failed\n");
exit(EXIT_FAILURE);
}
shm = shmat(shmid,0,0);
if(shm == (void*)-1)
{
fprintf(stderr,"shmat failed\n");
exit(EXIT_FAILURE);
}
printf("\n memary attached at %d\n",(int)shm);
shared = (struct shared_use_st *)shm;
shared->written = 0;
while(running)
{
if(shared->written != 0)
{
printf("you wrote : %s\n",shared->text);
sleep(rand()%3);
shared->written = 0;
if(strncmp(shared->text,"end",3) == 0)
running = 0;
}
else
sleep(1);
}
if(shmdt(shm) == -1)
{
fprintf(stderr,"shmdt failed\n");
exit(EXIT_FAILURE);
}
if(shmctl(shmid,IPC_RMID,0) == -1)
{
fprintf(stderr,"stmctl failed\n");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
return 0;
}
#include <stdio.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdlib.h>
#include <string.h>
struct msg
{
long msg_types;
char msg_buf[512];
};
int main()
{
int qid;
int pid;
int len;
struct msg pmsg;
pmsg.msg_types = getpid();
sprintf(pmsg.msg_buf,"hello! this is %d \n\0",getpid());
len = strlen(pmsg.msg_buf);
qid = msgget(IPC_PRIVATE,IPC_CREAT|0666);
//qid = msgget(0,IPC_CREAT|0666);
msgsnd(qid,&pmsg,len,0);
printf("succesfully send a message to queue:%d\n",qid);
//system("ipcs -q");
return 0;
}
#include <sys/types.h>
#include <sys/msg.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <string.h>
#include <signal.h>
struct msg_buf
{
int mtype;
char data[255];
};
int main()
{
key_t key;
pid_t pid;
int msgid;
int ret;
struct msg_buf msgbuf;
struct msg_buf msgbuf1;
struct msg_buf msgbuf2;
struct msg_buf msgbuf3;
int i = 0;
key=ftok(".",'a');
printf("key =[%x]\n",key);
msgid=msgget(key,IPC_CREAT|0666); /*通过文件对应*/
if(msgid==-1)
{
printf("create error\n");
return -1;
}
if((pid = fork()) < 0)
{
perror("fork error");
exit(0);
}
if( pid > 0)
{
msgbuf1.mtype = 1;
strcpy(msgbuf1.data,"test haha1");
msgbuf2.mtype = 2;
strcpy(msgbuf2.data,"test haha2");
msgbuf3.mtype = 3;
strcpy(msgbuf3.data,"test haha3");
ret=msgsnd(msgid,&msgbuf1,sizeof(msgbuf1.data),IPC_NOWAIT);
if(ret==-1)
{
printf("send message err\n");
return -1;
}
//sleep(3);
ret=msgsnd(msgid,&msgbuf2,sizeof(msgbuf2.data),IPC_NOWAIT);
if(ret==-1)
{
printf("send message err\n");
return -1;
}
// sleep(3);
ret=msgsnd(msgid,&msgbuf3,sizeof(msgbuf3.data),IPC_NOWAIT);
if(ret==-1)
{
printf("send message err\n");
return -1;
}
// sleep(3);
// kill(pid,SIGSTOP);
waitpid(pid,NULL,0);
exit(0);
}
if( pid == 0)
{
while(i < 3)
{
i++;
memset(&msgbuf,0,sizeof(msgbuf));
ret=msgrcv(msgid,&msgbuf,sizeof(msgbuf.data),i,0);
if(ret==-1)
{
printf("recv message err\n");
return -1;
}
printf("recv msg =[%s]\n",msgbuf.data);
sleep(1);
}
exit(0);
}
return 0;
}
#include <stdio.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <stdlib.h>
#define BUFSZ 4096
struct msg
{
long msg_types;
char msg_buf[512];
};
int main(int argc,char ** argv)
{
int qid;
int len;
struct msg pmsg;
if(argc != 2)
{
perror("argc");
}
qid = atoi(argv[1]);
len = msgrcv(qid,&pmsg,BUFSZ,0,0);
if(len > 0)
{
pmsg.msg_buf[len] = '\0';
printf("qid %d\n",qid);
printf("msg type %d\n",pmsg.msg_types);
printf("msg text %s\n",pmsg.msg_buf);
}
else if( len == 0)
{
printf("no message!\n");
}
else
{
perror("msgrcv\n");
}
//system("ipcs -q");
return 0;
}