简体   繁体   中英

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

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.)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM