pythonic
pythonic

Reputation: 21599

Bus error when trying to write in shared memory

I try to use shared memory with shm_open and mmap. However, whenever I try to write to that memory, I get bus error. The minimalist example code is given below. What is the problem here and how can it be solved?

#include <stdio.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

// compile with -lrt

char fname[64];
int fd;

int main()
{
    int * sm;
    sprintf( fname, "%d_%u", 4, 4 ); 

    if ((fd = shm_open(fname, O_CREAT | O_RDWR, 0777)) == -1)
    {        
        perror(NULL);
        return 0;
    }
    sm = (int*)mmap(0, (size_t)4096, PROT_READ|PROT_WRITE, MAP_FILE|MAP_SHARED, 
      fd, 0);
    printf( "Now trying to see if it works!\n" );
    sm[0] = 42;
    printf( "%d, %d!\n", sm[0], sm[1] );

    return 0;
}

The output I get is the following

Now trying to see if it works!
Bus error

Upvotes: 2

Views: 2599

Answers (1)

David Schwartz
David Schwartz

Reputation: 182753

A newly-created object has a size of zero. You cannot change the size of an object by mapping it or writing to its mapping. You probably need to call ftruncate before mmap. (If your code had error-checking, this would be much easier to figure out.)

Upvotes: 6

Related Questions