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

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 系统上 22errno 值为 EINVAL。您应该使用 perrorstrerror(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.