#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/types.h>
#include <unistd.h>
#include <string.h>
#include <sys/wait.h>
char msg[] = "Hello world";
int main(void)
{
int shmid;
pid_t pid;
shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT);
pid = fork();
if(pid > 0)
{
char *p_addr;
p_addr = shmat(shmid, NULL, 0);
memset(p_addr, '\0', sizeof(msg));
memcpy(p_addr, msg, sizeof(msg));
shmdt(p_addr);
waitpid(pid, NULL, 0);
}
else if(pid == 0)
{
char *c_addr;
c_addr = shmat(shmid, NULL, 0);
printf("Child process waits a short time: \n");
sleep(3);
printf("Child Process reads from shared memory: %s\n", c_addr);
shmdt(c_addr);
}
else
perror("fork");
return 0;
}
这是上面这段程序的运行结果:
我如果把menset、memcpy这两句函数注释掉,程序就可以正常运行了,但是因为注释掉了menset、memcpy函数,所以运行结果里也看不到打算写入共享内存里的内容。那怎么使用这两个函数才不会报错core dumped呢?