在Linux中,进程间可以通过多种方式共享内存。以下是一些常用的方法:
示例代码:
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *name = "/my_shared_memory";
int shm_fd;
void *ptr;
// 创建或打开共享内存对象
shm_fd = shm_open(name, O_CREAT | O_RDWR, 0666);
if (shm_fd == -1) {
perror("shm_open");
exit(1);
}
// 设置共享内存大小
if (ftruncate(shm_fd, sizeof(int)) == -1) {
perror("ftruncate");
exit(1);
}
// 映射共享内存到进程地址空间
ptr = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, shm_fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 写入数据
int value = 42;
memcpy(ptr, &value, sizeof(value));
// 清理资源
munmap(ptr, sizeof(int));
close(shm_fd);
shm_unlink(name);
return 0;
}
示例代码:
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
key_t key = 123456;
int shmid;
int *ptr;
// 创建或获取共享内存段
shmid = shmget(key, sizeof(int), IPC_CREAT | 0666);
if (shmid == -1) {
perror("shmget");
exit(1);
}
// 映射共享内存到进程地址空间
ptr = shmat(shmid, NULL, 0);
if (ptr == (void *) -1) {
perror("shmat");
exit(1);
}
// 写入数据
int value = 42;
memcpy(ptr, &value, sizeof(value));
// 清理资源
shmdt(ptr);
shmctl(shmid, IPC_RMID, NULL);
return 0;
}
示例代码:
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main() {
const char *filename = "my_shared_memory_file";
int fd;
void *ptr;
// 创建或打开文件
fd = open(filename, O_RDWR | O_CREAT, 0666);
if (fd == -1) {
perror("open");
exit(1);
}
// 设置文件大小
if (ftruncate(fd, sizeof(int)) == -1) {
perror("ftruncate");
exit(1);
}
// 映射文件到进程地址空间
ptr = mmap(NULL, sizeof(int), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (ptr == MAP_FAILED) {
perror("mmap");
exit(1);
}
// 写入数据
int value = 42;
memcpy(ptr, &value, sizeof(value));
// 清理资源
munmap(ptr, sizeof(int));
close(fd);
return 0;
}
这些方法都可以实现Linux进程间共享内存。你可以根据你的需求选择合适的方法。