Linux c++在cgi访问共享内存进程通信时多用户无法访问的问题

今天在用c++做cgi web程序代码中使用内存共享遇到apache调用老是出错,在终端控制台调用的时候就没有错误

1. 创建共享内存时,shmget函数的第三个参数是关于创建方式及创建权限的,其中该参数的后9位表示权限,对于root创建的共享内存,如果要让其他用户 读取,需要将权限设置为0666,即shmget(.., .., IPC_CREATE|0666),其中0表示拥有者ID,第一个6表示创建用户的权限,第二个表示同组用户权限,第三个表示其他用户权限,这里都设置为 可读可写了。

 

2. 创建的共享内存没有释放。对于创建的共享内存不是直接ctrl+c停止程序就可以释放了的,需要调用函数shmctl来释放该共享内存,此处释放意即删除的意思。

shm_id = shmget(key, FILE_SIZE, IPC_CREAT|IPC_EXCL|0666);

后面一定要加上0666控制权限

来源://作者:/更新时间:2014-03-03
相关文章