shmget报错Invalid argument
一、先看测试代码
#include <sys/types.h>
#include <sys/shm.h>
#include <iostream>
#include <stdio.h>using namespace std;int main()
{//int key=83886080;int key=53882300;int size=104595456;int rtn = shmget(key,size,IPC_CREAT|0666);cout <<"rtn="<<rtn<<endl;if (rtn == -1) {printf("mkshm error ! errno=%d , errmsg=%s \n", errno, strerror(errno));} else{cout << "shmget success \n";shmctl(rtn,IPC_RMID,0);}return 0;
}
运行结果: mkshm error ! errno=22 , errmsg=Invalid argument .
通过度娘终于知道原因:申请的共享内存空间超过了系统限制
代码申请大约100M共享内存,而系统共享内存上限只有32M:
cat /proc/sys/kernel/shmmax
33554432
二、修改共享内存上限值
建议将共享内存的上限值设为物理内存的一半,把共享内存大小设置为256MB。
临时修改(重启失效):
sysctl -w kernel.shmmax=268435456
永久修改:
root权限vi /etc/sysctl.conf系统配置文件:
kernel.shmmax = 268435456
执行sysctl -p使修改的配置生效
三、shmget函数简介
shmget简介 | ||
---|---|---|
头文件 |
#include < sys/ipc.h > #include <sys/shm.h> |
|
函数功能 | 得到一个现有的共享内存标识符或创建一个新的共享内存并返回其标识符 | |
函数原型 | int shmget(key_t key, size_t size, int shmflg) | |
参数详解 | ||
key | IPC_PRIVATE(0):建立新共享内存对象 | |
大于0的32位整数:视参数shmflg来确定操作。通常要求此值来源于ftok返回的IPC键值 | ||
size | 大于0的整数:新建的共享内存大小,以字节为单位 | |
0:只获取共享内存时指定为0 | ||
shmflg | 0:取共享内存标识符,若不存在则函数会报错 | |
IPC_CREAT:如果内核中不存在键值与key相等的共享内存,则新建;如果存在,返回此共享内存的标识符 | ||
IPC_CREAT|IPC_EXCL:如果不存在键值与key相等的共享内存,则新建共享内存;如果存在则报错 | ||
IPC_CREAT|mode_flags:mode_flags组成最低9bits指明所有者、同组用户和其他用户对共享内存的访问权限 | ||
函数返回值 | 成功:返回共享内存的标识符 | |
出错:-1,错误原因存于error中 | ||
错误代码 |
EINVAL:参数size小于SHMMIN或大于SHMMAX EEXIST:预建立key所指的共享内存,但已经存在 EIDRM:参数key所指的共享内存已经删除 ENOSPC:超过了系统允许建立的共享内存的最大值(SHMALL) ENOENT:参数key所指的共享内存不存在,而参数shmflg未设IPC_CREAT位 EACCES:没有权限 ENOMEM:核心内存不足 |
创建一个用于父子进程间通信的共享内存我们可以这样子进行创建:
<code>shmid shmid=shmget(IPC_PRIVATE,shmSize,IPC_CREAT|0640));</code>
参考博客:http://blog.csdn.net/K346K346/article/details/48496983
shmget报错Invalid argument相关推荐
- Tensorflow 2.5 model.evaluate报错Invalid argument: required broadcastable shapes at loc(unknown)
Tensorflow 2.5使用model.evaluate进行模型评估时报错Invalid argument: required broadcastable shapes at loc unknow ...
- Bert4Rec代码报错Invalid argument: Key: XXX. Can‘t parse serialized Example.
运行Bert4Rec代码时,先使用gen_data.py分割数据,后运行run.py进行训练,但是训练时报错Invalid argument: Key: XXX. Can't parse serial ...
- selenium driver.find_element 报错 invalid argument: invalid locator
selenium.common.exceptions.InvalidArgumentException: Message: invalid argument: invalid locator 报错信息 ...
- server 2008 mysql 报错 0xc000007b_docker插件部署项目,volumes报错invalid volume specification...
关于idea使用docker插件部署项目,volumes报错invalid volume specification 观察volumes那行,没写错的.但是........ 使用docker-comp ...
- MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image
MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image ...
- C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0..65535)
C# Excel导出超出65536行报错 Invalid row number (65536) outside allowable range (0-65535) 一:报错 Invalid row n ...
- CRMEB知识付费系统安装搭建【常见问题-19.支付宝支付报错invalid [default store dir]: /tmp/】
支付宝支付 报错 invalid [default store dir]: /tmp/ 1.如果使用支付宝sdk,首先lotusphp_runtime 文件也要一起使用 支付宝现在的php sdk中有 ...
- 小程序报错 Invalid regular expression: invalid group specifier name
export const getFileType = (fileName) => {if (!fileName) return '';//↓此处报错 Invalid regular expres ...
- 兼容性问题:安卓正常,ios报错invalid group specifier name
翻了很多网上的解决办法,最终发现竟然是因为正则表达式出了问题,安卓和苹果支持的正则表达式格式可能不太一样,但是之前苹果机型一直没出问题,最近才出现问题 常用零宽断言:?<=.?<!.?!. ...
最新文章
- stylus-loader (copy)
- (转)线段树的区间更新
- PMCAFF|产品经理必须懂得的五大心理学分支
- nyoj 791 Color the fence(贪心)
- 学习笔记:log4j.properties配置
- 2014年考研英语二作文PartB图表题
- Java基础——Java IO详解
- 期刊缩写查询_干活分享——SCI期刊名英文缩写查询
- 去掉“搜一搜”后,让“查看新贴”等按钮居中
- POJ-1903 Jurassic Remains
- Codejock Toolkit工具包专业版
- 打造地图拼接利器(一)前言
- SolidWorks的发展历史(1994~2007)
- teraterm 执行sql命令_捆绑你的操作(windows tera term高阶用法之并行处理)
- python for ArcGIS 绘制杭州市板块地图
- 广度优先搜索和深度优先搜索
- 台式计算机怎样能搜无线连接,台式电脑如何连接无线网络
- Baidu Expressive TTS《Multi-reference Tacotron by Intercross Training for Style Disentangling...》
- ISTQB基础级考试资料汇总
- 合成大西瓜unity总结