头文件
#include<sys/types.h>
#include <sys/shm.h>
void shm_test(){
key_t key(ftok(".", 3));
pid_t pid;
if((pid = fork()) > 0){
int shmid = shmget(key, 100, IPC_CREAT | IPC_EXCL | 0600); //Create
auto buf = (char *)shmat(shmid, nullptr, 0); //Link
print("shmid:", shmid);
while(read(STDIN_FILENO, buf, 100)){
if(buf[0] == 'q') break;
}
print("shmdt:", shmdt(buf)); //Separate
wait(0);
shmctl(shmid, IPC_RMID, 0); //Delete
}else if(pid == 0){
sleep(1);
int shmid = shmget(key, 0, 0);
auto buf = (char *)shmat(shmid, nullptr, 0);
char tmp[10] = {0};
while(1){
sleep(2);
if(buf[0] != 0) {
if (buf[0] == 'q') break;
else{
print(buf);
memset(buf, 0, 100);
}
}
}
print("son shmdt:", shmdt(buf));
}
}
APUE:“共享储存段紧靠在栈之下”