当前位置: 技术问答>linux和unix
求助linux普通用户下内存共享(系统V共享)大家进来看看啊!急!!
来源: 互联网 发布时间:2016-12-29
本文导语: 关键代码: const char* pszPath = "../"; //根据文件名和ID生成一个起标识作用的key key = ftok(pszPath, 0); if(key == -1) { perror("ftok error"); } //创建或者...
关键代码:
const char* pszPath = "../";
//根据文件名和ID生成一个起标识作用的key
key = ftok(pszPath, 0);
if(key == -1)
{
perror("ftok error");
}
//创建或者打开共享内存
iShmgID=shmget(key, dwShmSize, IPC_CREAT);
if(iShmgID == -1)
{
perror("shmget error");
}
//将共享内存区映射到自己的内存段,
pstShma=(engineer*)shmat(iShmgID, NULL, 0);
if((int)pstShma == -1)
{
perror("shmat error");
}
在普通用户下编译会报错:
shmat error: Permission denied
Segmentation fault
shmat 权限不够?能让root给普通用户授怎么的权限就可以了吗? 怎么授权?
要是iShmgID=shmget(key, dwShmSize, IPC_CREAT|0666);
就会报错:
shmget error: Permission denied
shmat error: Invalid argument
Segmentation fault
现在是shmget 权限不够 shmat 无效的参数
但是在root下面一切OK 我想知道这样的内存共享能在普通用户下面用吗?能的话怎么弄,谢谢来大赐教啊!!感激不敬啊!!
const char* pszPath = "../";
//根据文件名和ID生成一个起标识作用的key
key = ftok(pszPath, 0);
if(key == -1)
{
perror("ftok error");
}
//创建或者打开共享内存
iShmgID=shmget(key, dwShmSize, IPC_CREAT);
if(iShmgID == -1)
{
perror("shmget error");
}
//将共享内存区映射到自己的内存段,
pstShma=(engineer*)shmat(iShmgID, NULL, 0);
if((int)pstShma == -1)
{
perror("shmat error");
}
在普通用户下编译会报错:
shmat error: Permission denied
Segmentation fault
shmat 权限不够?能让root给普通用户授怎么的权限就可以了吗? 怎么授权?
要是iShmgID=shmget(key, dwShmSize, IPC_CREAT|0666);
就会报错:
shmget error: Permission denied
shmat error: Invalid argument
Segmentation fault
现在是shmget 权限不够 shmat 无效的参数
但是在root下面一切OK 我想知道这样的内存共享能在普通用户下面用吗?能的话怎么弄,谢谢来大赐教啊!!感激不敬啊!!
|
The ftok subroutine returns the value (key_t)-1 if one or more of the following are true:
* The file named by the Path parameter does not exist.
* The file named by the Path parameter is not accessible to the process.
* The ID parameter has a value of 0.
* The file named by the Path parameter does not exist.
* The file named by the Path parameter is not accessible to the process.
* The ID parameter has a value of 0.
|
shmget error: Permission denied
路径问题?“const char* pszPath = "../";”这个是哪里的路径?普通用户有权限否?
路径问题?“const char* pszPath = "../";”这个是哪里的路径?普通用户有权限否?
|
应该是路径不对,把路径换一个普通用户也可以访问的路径。
|
4楼红色字是不是说
key = ftok(pszPath, 0);
中出现了“0”?
楼主查一下这个函数的用法,共享内存的东西我忘完了。
key = ftok(pszPath, 0);
中出现了“0”?
楼主查一下这个函数的用法,共享内存的东西我忘完了。