进程间通信之线程使用共享内存
来源:互联网 发布:linux 运维命令 编辑:程序博客网 时间:2024/05/15 05:38
代码备用
#include<stdio.h>#include<stdlib.h>#include<pthread.h>#include<ctype.h>#include<unistd.h>#include<string.h>#include<fcntl.h> //O_RDWR#include<sys/types.h>#include<sys/ipc.h>#include<sys/msg.h>#include<sys/shm.h>#define BUFZE 32typedef struct{ char alpha;}array;pthread_mutex_t counter_clock = PTHREAD_MUTEX_INITIALIZER;void *athread(void*);void *bthread(void*);int main(int ac,char*av[]){ pthread_t t1,t2; int shm_id; array *p_map; key_t key; key = ftok(".", 0); if(-1 == key) { perror("ftok error"); exit(1); } shm_id = shmget(key, BUFZE, IPC_CREAT|0666); if(shm_id < 0) { perror("shmget error..."); exit(2); } printf("Successfully created segment:%d\n",shm_id); system("ipcs -m"); p_map = (array*)shmat(shm_id, NULL, 0); memset( p_map, '@', BUFZE); pthread_create(&t1,NULL,athread,(void*)p_map); pthread_create(&t2,NULL,bthread,(void*)p_map); pthread_join(t1,NULL); pthread_join(t2,NULL); if(shmdt(p_map) == -1) { perror("detach error"); exit(4); } /* delete the shared memory */ shmctl(shm_id, IPC_RMID, 0); printf("main exit\n"); return 0;}void *athread(void*f){ int i; char temp='A'; array *p_map=(array *)f; printf("A: enter\n"); for(i=0; i < BUFZE; i++) { pthread_mutex_lock(&counter_clock); printf("A: wrote [%d]:%c\n", i, temp); memcpy((void*)&(*(p_map+i)).alpha, &temp, 1); temp += 1; pthread_mutex_unlock(&counter_clock); } printf("A: exit\n");}void *bthread(void*f){ int fd; int i; int n; char tem; array *p_map=(array *)f; fd = open("./test.dat", O_RDWR|O_CREAT, 0700); if(fd == -1) { perror("Failed to open/creat the file"); exit(5); } printf("B: enter\n"); for(i = 0;i < BUFZE; i++) { pthread_mutex_lock(&counter_clock); tem = (*(p_map+i)).alpha; n = write(fd, &tem, 1); if(n == -1) { perror("Failed in the writing thread"); exit(6); } printf("B: read [%d]:%c\n", i, tem); pthread_mutex_unlock(&counter_clock); } printf("B: exit\n");}
0 0
- 进程间通信之线程使用共享内存
- linux c之使用共享内存实现进程间通信
- linux进程间通信之共享内存
- 进程间通信之共享内存篇
- linux进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存篇
- 进程间通信之共享内存
- Linux进程间通信之共享内存
- Linux进程间通信之共享内存
- 进程间通信之共享内存
- Windows进程间通信之共享内存
- 进程间通信之共享内存
- 进程间通信之共享内存
- QT 进程间通信 之 共享内存
- 进程间通信IPC之--共享内存
- C++中构造函数、析构函数的执行顺序
- MATLAB相关
- 一种快速查询多点DS18B20温度的方法
- Linux 网络编程——网络字节序、地址转换
- Hibernate session 的使用
- 进程间通信之线程使用共享内存
- JSP编译指令常用用法详解
- KKT条件
- BuildingS——排序+贪心
- 强引用,软引用,弱引用,虚引用
- 关于centos 挂载nfts文件系统
- #include和#import区别以及@class作用
- Linux网络基础知识
- 2015年4月16日---开始写自己的专业博客