将数据填充到空的.txt文件中时发生mmap错误

时间:2018-08-30 13:31:27

标签: c linux mmap

最初,我创建了一个空的 .txt” 文件。然后,我尝试将一些字符串(例如“ HI”)复制到该< strong>“ .txt” 文件。但是我得到了 mmap:无效的参数
因此,我将长度从(mystat.st_size = 0)增加到4096。即使我遇到错误。
./ a.out mystat.st_size 0 总线错误(核心已转储)
为什么?

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>

int main()
{
        int fd;
        void *ptr;
        struct stat mystat;

        /*opening a empty text file*/
        fd = open("test.txt", O_RDWR);
        if (fd == -1) {
                perror("open");
                return -1;
        }
        /*File size checking*/
        if((fstat(fd, &mystat))<0)
        {
                perror("fstat");
                close(fd);
                return -1;
        }

        ptr = mmap(0, mystat.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
        if (ptr == MAP_FAILED)
        {
                perror("mmap");
                close(fd);
                return -1;
        }

        strncpy(ptr, "Hi", 3);
        close(fd);
        return 0;

}

任何人都可以帮忙吗?

0 个答案:

没有答案