Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux中的共享内存(ipc)_Linux_Ipc_Shared Memory - Fatal编程技术网

linux中的共享内存(ipc)

linux中的共享内存(ipc),linux,ipc,shared-memory,Linux,Ipc,Shared Memory,共享内存意味着一个进程将创建另一个进程可以访问的内存部分 我的问题是:另一个进程如何知道创建的共享内存shmid(即shmid=shmget(key-t,size,permission);)?为了简化:创建共享内存的进程定义了名称和权限(登录用户的进程) 基本上,您可以创建一个文件: file_descriptor = shm_open("/some.shared.memory", (O_CREAT | O_RDWR),

共享内存意味着一个进程将创建另一个进程可以访问的内存部分


我的问题是:另一个进程如何知道创建的共享内存
shmid
(即
shmid=shmget(key-t,size,permission);
)?

为了简化:创建共享内存的进程定义了名称和权限(登录用户的进程)

基本上,您可以创建一个文件:

file_descriptor = shm_open("/some.shared.memory", 
                   (O_CREAT | O_RDWR),
                   (S_IREAD | S_IWRITE))  
或者,如果它存在,您可以打开它:

file_descriptor = shm_open("/some.shared.memory",
                   (O_CREAT | O_EXCL | O_RDWR),
                   (S_IREAD | S_IWRITE))
因此,名称“/some.shared.memory”是查找共享段的方法。(注意旗帜)

  • 看看这里
  • 在“shm_open example”上进行谷歌搜索,你会发现很多例子
  • 创建文件的过程将确定权限(所有者+组),请参阅chown命令和fchmod函数,您可以调用这些函数来设置权限。还可以查看一下umask

    • 他们需要使用相同的方法来推导密钥;通常使用
      ftok
      函数,其中双方使用相同的文件名和id值,因此最终使用相同的密钥