gpt4 book ai didi

c# - 如何在不取消链接的情况下关闭 shm_open 文件描述符?

转载 作者:太空宇宙 更新时间:2023-11-04 07:51:01 27 4
gpt4 key购买 nike

我有一个公共(public)的共享内存空间,多个进程可以读写它。我在使用 shm_open() 访问共享内存并使用 mmap() 写入内存映射文件时遇到了这个问题。但是,在调用我的包装器方法几次之后,当我调用 shm_open() 时,我将遇到 ERRNO 24(打开的文件过多)。

我尝试使用 shm_unlink(),但这关闭了与共享内存空间关联的名称,我无法再次访问具有关联名称的内存。如何关闭文件描述符并单独保留与共享内存关联的名称?

本质上,我希望包装函数执行此操作:

public static void Write(string name, int size, int offset, List<byte> data)
{
int fd = shm_open(name, O_RDWR, S_IWUSR | S_IWOTH);
if(fd < 0) { // throw error }

IntPtr *ptr = mmap(null, shmSize, PROT_WRITE, MAP_SHARED, fd, 0);
if(ptr < 0) { // throw error }

foreach(byte in data) { // write to shared memory }

munmap(ptr, shmSize);

shm_close(fd) // <-- I want to do equivalent of this

}

让事情变得更复杂一点。我正在 Linux 环境中使用 C# 进行开发,并使用 DLL 导入来调用 Linux native 函数。

最佳答案

close 函数是关闭任何类型文件描述符的机制,包括引用共享内存的文件描述符。

关于c# - 如何在不取消链接的情况下关闭 shm_open 文件描述符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53843144/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com