BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #29917同步于 2009/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

linux c 共享内存的问题。。。。

Wyatt
2009/10/14镜像同步1 回复
为什么修改 char flag[]的 内容程序就会报错:Segmentation fault --------------- #include <sys/shm.h> #include <sys/ipc.h> #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #define BUF_SIZE 2048 #define DUG_SHOW 0 void err_quit(char *msg) { perror(msg); exit(1); } int main() { pid_t pid; int shmid; char *shm_addr; char flag[]="WROTU"; char *buff; /*创建共享内存*/ if((shmid = shmget(IPC_PRIVATE,BUF_SIZE,0666)) <0) err_quit("shmget 创建共享内存"); else printf("Create 创建共享内存 share-mem:%d \n",shmid); /*显示共享内存*/ if(DUG_SHOW) system("ipcs -m"); pid = fork(); if(pid ==-1) err_quit("fork"); else if(pid == 0){ //子进程 /*映射共享内存*/ if((shm_addr = shmat(shmid, 0, 0)) == (void *) -1) err_quit("\tChild :shmat"); else printf("\tChild: Attach shared-memory :%p\n",shm_addr); /*显示共享内存*/ if(DUG_SHOW) system("ipcs -m"); while(strncmp(shm_addr, flag, strlen(flag))){ printf("\tChild: wait for enable data...\n"); sleep(5); } strcpy(buff, shm_addr); printf("\tChild: Shared-memory:%s\n",buff); /*解除共享内存映射*/ if((shmdt(shm_addr))<0) err_quit("shmdt"); else printf("\tChild: Deattach Shared-memory\n"); if(DUG_SHOW) system("ipcs -m"); if(shmctl(shmid,IPC_RMID,NULL) ==-1 ) err_quit("shmdt"); else printf("\tChild: Delete Shared-memory\n"); if(DUG_SHOW) system("ipcs -m"); } else{ //父进程 /*映射共享内存*/ if((shm_addr = shmat(shmid, 0, 0)) == (void *) -1) err_quit("Parent :shmat"); else printf("Parent: Attach shared-memory :%p\n",shm_addr); sleep(1); printf("\n\nInput some string:\n"); fgets(buff,BUF_SIZE,stdin); strncpy(shm_addr +strlen(flag),buff,strlen(buff)); strncpy(shm_addr, flag, strlen(flag)); /*解除共享内存映射*/ if((shmdt(shm_addr))<0) err_quit("Parent: shmdt"); else printf("Parent: Deattach Shared-memory\n"); if(DUG_SHOW) system("ipcs -m"); waitpid(pid, NULL, 0); printf("Finished\n"); } exit(0); }
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
sunway机器人#1 · 2009/10/14
buff没分配内存.. 【 在 Wyatt (小Z@哭着喊着要进步) 的大作中提到: 】 : 为什么修改 char flag[]的 内容程序就会报错:Segmentation fault : --------------- : #include <sys/shm.h> : ...................