Linux普通用户释放内存,求助linux普通用户下内存共享(系统V共享)大家进来看看啊!急!!...

关键代码:

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.

|

shmget error: Permission denied

路径问题?“const char* pszPath = "../";”这个是哪里的路径?普通用户有权限否?

|

应该是路径不对,把路径换一个普通用户也可以访问的路径。

|

4楼红色字是不是说

key = ftok(pszPath, 0);

中出现了“0”?

楼主查一下这个函数的用法,共享内存的东西我忘完了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值