一种常见的保护不同进程间共享的内存的方法是使用信号量(semaphore)。信号量是一个整数计数器,可以用来实现进程间的同步和互斥。
以下是一个示例程序,展示了如何使用信号量来保护不同进程之间共享的内存:
#include
#include
#include
#include
#include
#include
#define SEM_KEY 12345
#define SHM_KEY 54321
// 定义信号量的操作
struct sembuf sem_op1 = {0, -1, SEM_UNDO};
struct sembuf sem_op2 = {0, 1, SEM_UNDO};
int main() {
// 创建共享内存
int shmid = shmget(SHM_KEY, sizeof(int), IPC_CREAT | 0666);
if (shmid == -1) {
perror("Error creating shared memory");
return 1;
}
// 创建信号量
int semid = semget(SEM_KEY, 1, IPC_CREAT | 0666);
if (semid == -1) {
perror("Error creating semaphore");
return 1;
}
// 初始化信号量值为1
semctl(semid, 0, SETVAL, 1);
// 在不同进程中访问共享内存
pid_t pid = fork();
if (pid == -1) {
perror("Error creating child process");
return 1;
} else if (pid == 0) {
// 子进程
int *ptr = shmat(shmid, NULL, 0);
if (ptr == (void*) -1) {
perror("Error attaching shared memory");
return 1;
}
// 等待信号量
if (semop(semid, &sem_op1, 1) == -1) {
perror("Error waiting for semaphore");
return 1;
}
// 访问
上一篇:保护部署免受手动删除。
下一篇:保护不透明数据类型中的数据