/*shmread.c*/#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;int i; 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 == 1) { printf("get string: %s\n",shared->text); sleep(rand()%3); shared->written = 2; if(strncmp(shared->text,"end",3) == 0) running = 0; } else if(shared->written == 2){i = 0;while(shared->text[i] != '\n'){ if(shared->text[i] >= 'A' && shared->text[i] <= 'Z'){shared->text[i] += 32;}i++;}shared->written = 3;printf("send string:%s\n",shared->text);}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;}
/*shmwrite.c*/#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <sys/shm.h>#include "shmdata.c"#include <string.h>#define BUFFSIZE 2048int 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) {if(shared->written == 0){printf("send string:\n"); fgets(buffer,BUFFSIZE,stdin); strncpy(shared->text,buffer,TEXT_SZ);shared->written = 1; if(strncmp(shared->text,"end",3) == 0) running = 0;}else if(shared->written == 3){printf("get string:%s\n",shared->text);shared->written = 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;}
0 0