2

shm_openmmapで共有メモリを使おうとしています。ただし、そのメモリに書き込もうとすると、バスエラーが発生します。最小限のサンプルコードを以下に示します。ここでの問題は何ですか、そしてそれをどのように解決できますか?

#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;
}

私が得る出力は次のとおりです

Now trying to see if it works!
Bus error
4

1 に答える 1

6

新しく作成されたオブジェクトのサイズはゼロです。オブジェクトをマッピングしたり、マッピングに書き込んだりして、オブジェクトのサイズを変更することはできません。ftruncateおそらく前に電話する必要がありますmmap。(コードにエラーチェックが含まれている場合、これははるかに簡単に理解できます。)

于 2012-07-22T13:05:14.040 に答える