1
メモリに書き込もうとするとバスエラー(コアダンプ)が発生します。私はLinuxでmmap()とopen()関数を使ってバイナリファイルに書きたいと思っています。バイナリファイルに1から100までの整数を書きたいのですが、ファイルに直接書き込むのではなく、メモリにマッピングします。mmapによるバスエラー
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/mman.h>
#include <string.h>
#include <stdlib.h>
#define FILE_SIZE 0x100
int main(int argc,char *argv[])
{
int fd;
void *pmap;
printf("im here");
//fd=open(argv[1],O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
fd=open("numbers.raw",O_RDWR);
if(fd == -1)
{
perror("open");
exit(1);
}
lseek(fd,FILE_SIZE+1,SEEK_SET); //checking the file length
lseek(fd,0,SEEK_SET);//points to start of the file
//create the memory mapping
pmap = mmap(0,FILE_SIZE,PROT_WRITE,MAP_SHARED,fd,0);
if(pmap == MAP_FAILED)
{
perror("mmap") ;
close(fd);
exit(1);
}
close(fd);
for(int i=1;i<=100;i++)
sprintf(pmap,"%d",i);
return 0;
}
FILE_SIZEを0xA00に引き上げて、より安全な側にしました。バイナリの数値を格納し、進めるために、printf(pmap、 "%d \ n"、i)を使用しました。しかし、私はまだ同じエラーが発生します。 –
また、open()コマンドでファイルサイズを指定するには –