gpt4 book ai didi

linux - mmap 总线错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:18:52 24 4
gpt4 key购买 nike

尝试写入内存时出现总线错误(核心已转储)。我想在 Linux 中使用 mmap() 和 open() 函数写入二进制文件。我想通过将二进制文件映射到内存而不是直接写入文件来将 1 到 100 之间的整数写入二进制文件。

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

}

最佳答案

您的评论说您正在“检查文件长度”,但您从不检查该调用的返回值。我敢打赌它会失败,因为您的文件不够大,因此稍后会出现总线错误。您的文件中还有多个其他不相关的错误,通过 方式:

  1. 您的文件大小假定 0x100 字节足以存储 100 个二进制整数。 64 位系统不是这种情况。
  2. 您实际上并没有存储二进制数 - 您存储的是数字字符串。
  3. 你没有在你写的地方前进,所以你把所有的数字都写在文件的开头,一个写在另一个上面。

关于linux - mmap 总线错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46627578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com