Вообщем получилось как-то так.
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#define FILE_LENGTH 0x100
int main()
{
void *file_memory;
int fd = open("file", O_RDWR|O_CREAT, S_IRUSR|S_IWUSR);
file_memory = mmap(0, FILE_LENGTH, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
close(fd);
sprintf((char*) file_memory, "%s\n", "Hello!");
msync(file_memory, FILE_LENGTH, MS_SYNC);
system("./receiver");
munmap(file_memory, FILE_LENGTH);
exit(0);
}
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <unistd.h>
#define FILE_LENGTH 0x100
int main (int argc, char* const argv[])
{
int fd;
void* file_memory;
char str[50];
fd = open ("file", O_RDWR, S_IRUSR | S_IWUSR);
file_memory = mmap (0, FILE_LENGTH, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
close (fd);
sscanf(file_memory, "%s", str);
printf("%s\n", str);
return 0;
}
Файл, отображаемый в память не должен быть нулевой длины, иначе программа будет падать с SIGBUS, я его забил на 256 байт нулями.