我试图在shm_open和ftruncate成功后超出共享内存对象的限制。以下是代码:
char *uuid = GenerateUUID();
int fd = shm_open(uuid, O_RDWR|O_CREAT|O_EXCL, S_IRUSR|S_IWUSR);
if(fd == -1) perror("shm_open");
size_t shmSize = sizeof(container);
int ret = ftruncate(fd, shmSize);
perror("ftruncate first");
ret = ftruncate(fd, shmSize * 2);
perror("ftruncate second");
第一次ftruncate操作成功了,但第二次ftruncate操作失败了,错误代码是errno=22,“无效参数”。
我还尝试在mmap之后使用ftruncate来截取内存对象。根据ftruncate的手册页面,共享内存应该被格式化为零到新长度。
此外,我还尝试在子进程中截取内存对象(这是两个进程之间的IPC主题),但ftruncate返回“无效fd,没有这样的文件或目录”,但我能够在子进程中成功地shm_open和mmap。
有什么想法吗?谢谢!