在C shmget中查找共享内存的大小

问题描述 投票:0回答:1

我想知道是否有可能在不将段大小作为数据一部分的情况下从shmget中创建C中的共享内存段的大小吗?我正在尝试分配一个动态的int数组,并且需要在子进程中查找该数组的大小。

主要过程:

int sizeOfArray = 3;
int shm = shmget(IPC_PRIVATE, sizeof(int) * sizeOfArray, IPC_CREAT | 0666);
int *a = (int*) shmat(shm, NULL, 0);
a[0] = 0;
a[1] = 1;
a[2] = 2;
if (fork() == 0) {
    char *args[3];
    char shmID[11];
    bzero(shmID, 11);
    intToString(shm, shmID); // custom function that does what the name implies
    args[0] = "slave";
    args[1] = shmID;
    args[2] = NULL;
    execvp("slave", args);
    return -1;
}

wait(NULL);
shmdt((void*) a);
shmctl(shm, IPC_RMID, NULL);

子进程(从属::)>

int shm = atoi(argv[1]);
int *ptr = (int*) shmat(shm, NULL, 0);
//TODO: find length of int array in shared memory
shmdt((void*) ptr);
return 0;

我想知道是否有可能在不使用段的大小作为数据一部分的情况下从shmget获取C语言中共享内存段的大小吗?我正在尝试分配动态...

c shared-memory
1个回答
0
投票

我发现如果使用shmctlIPC_STAT标志,则可以获得分配给共享内存段的字节数。然后,您可以将其除以sizeof(int)以获得数组的大小。

© www.soinside.com 2019 - 2024. All rights reserved.