La solución esta en emular las matrices al puro estilo de malloc (método index magic).
Supongamos que queremos declarar una matriz de enteros de 5x5 en memoria compartida.
El tamaño de la memoria será: el tamaño del tipo de dato multiplicado por la cantidad de columnas y la cantidad de filas.
int id_Memoria = shmget (key,sizeof(int) * 5 * 5, 0777 | IPC_CREAT);
Ahora para acceder a la memoria sería:
// nCol = Cantidad de columnas de la matriz
matriz[x][y] ----> matriz[y * nCol + x];
Ejemplo con código:
- int nFil = 5; // numero de filas
- int nCol = 5; // numero de columnas
- int row, column;
- int *matrix;
- // Crea el segmento de memoria compartida
- id_shmem = shmget(ipc_key, sizeof(int)*nFil*nCol, IPC_CREAT|0777);
- matrix = (int *)shmat(id_shmem, 0, 0);
- matrix[3*nCol + 2] = 1; // Equivalente a matrix[2][3]
Links:
http://stackoverflow.com/questions/1961504/is-it-possible-to-allocate-a-2d-array-as-shared-memory-with-ipc
Buenísimo!
ResponderEliminarBusqué "matriz memoria compartida c" y fue lo primero que me apareció.
Me sirvió, gracias!