#define MAX_SZIE 1024 struct share_block { int flag; char buffer[MAX_SZIE]; };
int main() { int shmid; struct share_block *pshare; char buffer[MAX_SZIE] = {0}; int running = 1; int ret; // 创建共享内存或者获取共享内存 返回共享内存标识符 shmid = shmget((key_t)1234, sizeof(struct share_block), 0666 | IPC_CREAT); if (-1 == shmid) { perror("shmget"); return -1; } // 将共享内存映射到本地空间 pshare = shmat(shmid, NULL, 0); if ((void *) -1 == pshare) { perror("shmat"); return -1; } // 从共享内存里读入数据 while (running) { //printf ("pshare->flag = %d\n", pshare->flag); if (1 == pshare->flag) { // 从共享内存里读入数据 strncpy(buffer, pshare->buffer, MAX_SZIE); if (strncmp("end", buffer, 3) == 0) { running = 0; } printf("Read from shared memory: %s\n", buffer); // 往共享内存里写入数据 printf("please say something:\n"); fgets(buffer, MAX_SZIE, stdin); strncpy(pshare->buffer, buffer, MAX_SZIE); pshare->flag = 0; } } // 解除映射 ret = shmdt(pshare); if (-1 == ret) { perror("shmdt"); return -1; } return 0; }