0

我最近从一个 YouTube 视频中了解到,我们可以通过将文件映射到内存来读取或写入文件。该视频展示了如何从文本文件中读取一些内容并将其打印出来并更改文本文件的一些字符。我尝试使用这种技术将一些内容写入文件,但每当我构建和运行我的代码时,我都会遇到分段错误(核心转储)错误,我不知道为什么。

#include<stdio.h>
#include<stdlib.h>
#include<sys/mman.h>
#define SIZE 5 * sizeof(float)

int main()
{
    float *info = (float*) malloc (SIZE);
    if(info == NULL)
    {
        printf("Unable to allocate memory.");
        exit(EXIT_FAILURE);
    }

    for(int counter = 0; counter < 5; counter++)
        *(info + counter) = counter + 1;

    FILE *file = fopen("information.dat", "w");
    if(file == NULL)
    {
        printf("Unable to open the file.");
        exit(EXIT_FAILURE);
    }

    float *memory = mmap(NULL, SIZE, PROT_WRITE, MAP_PRIVATE, fileno(file), 0);

    for(int counter = 0; counter < 5; counter++)
    {
        *(memory + counter) = *(info + counter);
        printf("%5.2f has been saved in the file.\n", *(info + counter));
    }

    fclose(file);
    free(info);
}

我的操作系统是 ubuntu 18.04,我使用 GCC 7.3.0 编译器。

4

0 回答 0