简单的,两个不同进程间的共享内存通信(大小写转换)
2016-11-25 10:16
447 查看
/*shmdata.c*/
#define TEXT_SZ 2048 struct shared_use_st { int written; char text[TEXT_SZ]; };
/*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 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) { 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; }
相关文章推荐
- UNIX环境高级编程学习之第十五章进程间通信 - 两个进程通过映射普通文件实现共享内存通信
- linux两个程序通过共享内存通信的一个简单例子
- 通过共享内存,利用循环队列实现两个进程A,B之间的通信
- linux两个程序通过共享内存通信的一个简单例子
- 通过共享内存,实现两个进程A,B之间的通信
- linux进程通信:共享内存(转)
- 进程通信-共享内存-mmap()
- 两个不同的OS环境,通过中断和共享内存进行数据传输
- 共享内存应用于进程通信
- 非亲缘进程间的共享内存与信号通信
- Linux进程通信 共享内存
- UNIX/LINUX编程学习之进程通信--共享内存
- window中进程间如何通信vc++技术 (共享内存)
- 进程通信之共享内存
- 进程通信-共享内存-mmap()-code1
- 非亲缘进程间的共享内存与信号通信
- linux 进程间的通信(五) 共享内存-2
- 直接读取进程内存实现两个应用程序之间的通信
- 进程之间使用共享内存通信....
- 应用程序开发-进程通信-共享内存