Access numpy array from separate C process using shared memory
Here is a minimal example:
Python
import osimport posix_ipcimport numpy as npx = np.arange(1000, dtype='i4')f = posix_ipc.SharedMemory('test', flags=posix_ipc.O_CREAT, size=x.nbytes, read_only=False)ff = os.fdopen(f.fd, mode='wb')ff.write(x.data)ff.close() # flush doesn't work, but this does.
C
// shm.c#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#include <sys/mman.h>int main(int argc, char *argv[]){ int i, fd; int *data; fd = shm_open("test", O_RDONLY, 0); if (fd == -1) printf("Error!, bad file desciptor"); data = mmap(NULL, sizeof(int), PROT_READ, MAP_PRIVATE, fd, 0); if (data == MAP_FAILED) printf("Error!, map failed!"); for(i = 0; i < 1000; i++){ printf("%d, ", (int)data[i]); } return 0;}$ gcc shm.c -lrt -o shm$ ./shm 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, ...