无法定义共享内存对象的大小

时间:2019-10-21 13:02:33

标签: c unix posix shared-memory

您好,我正在尝试使用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,正如我在互联网上看到的那样,是由于“无效参数”引起的,但是我不明白为什么。 ?

1 个答案:

答案 0 :(得分:2)

在Linux系统上,errno的{​​{1}}值为22。除了显示数字值,您还应该使用EINVALperror来获取诸如“无效参数”之类的文本错误消息。

使用

strerror(errno)

ftruncate()的POSIX文档列表:

  

if ((shmid = shm_open("/OS", O_RDWR | O_CREAT, 0700)) == -1){ [EBADF]-       fildes参数不是开放的文件描述符。

  

[EINVAL]-       fildes参数引用未经写许可打开的文件。

位于https://linux.die.net/man/2/ftruncate的Linux手册页

  

[EINVAL]EBADF-       fd尚未开放写作。