Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C shmget中查找共享内存的大小_C_Shared Memory - Fatal编程技术网

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

在C shmget中查找共享内存的大小,c,shared-memory,C,Shared Memory,我想知道是否有可能获得从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;

我想知道是否有可能获得从
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);
子进程(从进程):


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

struct shmid_ds buf;
shmctl(shm, IPC_STAT, &buf);
int length = (int) buf.shm_segsz / sizeof(int);

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

struct shmid_ds buf;
shmctl(shm, IPC_STAT, &buf);
int length = (int) buf.shm_segsz / sizeof(int);