IPC (особенно канал Unix) гораздо эффективнее, чем вы думаете, и это, вероятно, правильный механизм для использования.
Однако, поскольку вы спросили, как это сделать без IPC (и я понимаю, что это означает без переключения и копирования контекста), вы можете просто создать сегмент общей памяти между двумя процессами:
fd = shm_open("/my_shmem", O_RDWR| O_CREAT, S_IWUSR);
if(fd == -1) abort();
ftruncate(fd, SHMEM_SIZE);
p = mmap(NULL, SHMEM_SIZE, PROT_WRITE | PROT_READ, MAP_SHARED, fd, 0);
if(p == MAP_FAILED) abort()
Теперь p имеет адрес для сегмента общей памяти, совместно используемого двумя (или более) процессами.
Внимание! числовое значение p (виртуальный адрес памяти) может отличаться в разных процессах, поэтому, если вы хотите поместить связанный список в общую память, например, вам придется использовать смещения.
Ура,
GBY