无法定义共享内存对象的大小
Can't define the size of a shared memory object
您好,我正在尝试使用 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);
}
正如您想象的那样,它一直打印出来 "Error defining size"。
shmid 打印出来的值为 3,一个有效值。然而 ftruncate() 函数 returns -1 因为错误...设置为 errno 的值是 22,正如我在互联网上看到的那样是由于 "invalid arguments" 但我不明白为什么....建议?
Linux 系统上 22
的 errno
值为 EINVAL
。您应该使用 perror
或 strerror(errno)
来获取文本错误消息,而不是显示数字值,例如 "Invalid argument".
使用
if ((shmid = shm_open("/OS", O_RDWR | O_CREAT, 0700)) == -1){
ftruncate()
的 POSIX 文档列出:
[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.
您好,我正在尝试使用 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);
}
正如您想象的那样,它一直打印出来 "Error defining size"。 shmid 打印出来的值为 3,一个有效值。然而 ftruncate() 函数 returns -1 因为错误...设置为 errno 的值是 22,正如我在互联网上看到的那样是由于 "invalid arguments" 但我不明白为什么....建议?
Linux 系统上 22
的 errno
值为 EINVAL
。您应该使用 perror
或 strerror(errno)
来获取文本错误消息,而不是显示数字值,例如 "Invalid argument".
使用
if ((shmid = shm_open("/OS", O_RDWR | O_CREAT, 0700)) == -1){
ftruncate()
的 POSIX 文档列出:
[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
orEINVAL
— fd is not open for writing.