返回信息流为什么修改 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);
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #29917同步于 2009/10/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
linux c 共享内存的问题。。。。
Wyatt
2009/10/14镜像同步1 回复
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
buff没分配内存..
【 在 Wyatt (小Z@哭着喊着要进步) 的大作中提到: 】
: 为什么修改 char flag[]的 内容程序就会报错:Segmentation fault
: ---------------
: #include <sys/shm.h>
: ...................