您好,我正在尝试使用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,正如我在互联网上看到的那样,是由于“无效参数”引起的,但是我不明白为什么。 ?
答案 0 :(得分:2)
在Linux系统上,errno
的{{1}}值为22
。除了显示数字值,您还应该使用EINVAL
或perror
来获取诸如“无效参数”之类的文本错误消息。
使用
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尚未开放写作。