无法定义共享内存对象的大小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法定义共享内存对象的大小相关的知识,希望对你有一定的参考价值。
您好,我正在尝试使用POSIX函数创建共享内存对象,但出现了奇怪的错误。
//创建共享内存
if( (shmid = shm_open("/OS", O_CREAT ,0700)) == -1)
printf("Error creating memory\n");
exit(1);
printf("shmid: %d\n", shmid);
if (ftruncate(shmid, sizeof(int)) == -1)
printf("Error defining size\n");
exit(1);
您可以想象,它一直在打印“错误定义尺寸”。shmid输出的值为3,是有效值。但是ftruncate()函数由于错误而返回-1 ...设置为errno的值为22,正如我在互联网上看到的那样,这是由于“无效参数”引起的,但是我不明白为什么。 ?
答案
在Linux系统上,errno
的22
值为EINVAL
。除了显示数字值,您还应该使用perror
或strerror(errno)
来获取诸如“无效参数”之类的文本错误消息。
使用
if( (shmid = shm_open("/OS", O_RDWR | O_CREAT ,0700)) == -1)
ftruncate
列表中的https://pubs.opengroup.org/onlinepubs/7908799/xsh/ftruncate.html的文档
[EBADF] or [EINVAL] The fildes argument is not a file descriptor open for writing.
和
[EINVAL] The fildes argument references a file that was opened without write permission.
https://linux.die.net/man/2/ftruncate状态下的Linux手册页>
EBADF or EINVAL fd is not open for writing.
以上是关于无法定义共享内存对象的大小的主要内容,如果未能解决你的问题,请参考以下文章