c - 在 C 中使用 mmap 写入内存。

标签 c mmap

<分区>

我想使用 mmap() 创建一个包含一些整数的文件。我想通过写入内存来写入这个文件。我知道内存中的数据是二进制格式,因此文件中的数据也将是二进制格式。 我可以为此目的使用 mmap 吗?我在哪里可以找到有关如何使用 mmap 的好资源?我没有找到一个好的手册来开始。

最佳答案

这是一个例子:

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/mman.h> /* mmap() is defined in this header */
#include <fcntl.h>
#include <stdio.h>

void err_quit(char *msg)
{
    printf(msg);
    return 0;
}

int main (int argc, char *argv[])
{
 int fdin, fdout;
 char *src, *dst;
 struct stat statbuf;
 int mode = 0x0777;

 if (argc != 3)
   err_quit ("usage: a.out <fromfile> <tofile>");

 /* open the input file */
 if ((fdin = open (argv[1], O_RDONLY)) < 0)
   {printf("can't open %s for reading", argv[1]);
    return 0;
   }

 /* open/create the output file */
 if ((fdout = open (argv[2], O_RDWR | O_CREAT | O_TRUNC, mode )) < 0)//edited here
   {printf ("can't create %s for writing", argv[2]);
    return 0;
   }

 /* find size of input file */
 if (fstat (fdin,&statbuf) < 0)
   {printf ("fstat error");
    return 0;
   }

 /* go to the location corresponding to the last byte */
 if (lseek (fdout, statbuf.st_size - 1, SEEK_SET) == -1)
   {printf ("lseek error");
    return 0;
   }
 
 /* write a dummy byte at the last location */
 if (write (fdout, "", 1) != 1)
   {printf ("write error");
     return 0;
   }

 /* mmap the input file */
 if ((src = mmap (0, statbuf.st_size, PROT_READ, MAP_SHARED, fdin, 0))
   == (caddr_t) -1)
   {printf ("mmap error for input");
    return 0;
   }

 /* mmap the output file */
 if ((dst = mmap (0, statbuf.st_size, PROT_READ | PROT_WRITE,
   MAP_SHARED, fdout, 0)) == (caddr_t) -1)
   {printf ("mmap error for output");
    return 0;
   }

 /* this copies the input file to the output file */
 memcpy (dst, src, statbuf.st_size);
 return 0;

} /* main */  

From Here
Another Linux example
Windows implementation 的内存映射。

关于c - 在 C 中使用 mmap 写入内存。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26259421/

相关文章:

c - 使用mingw32编译时出现链接错误

c++ - 为什么我可以在循环内重新初始化常量?

c - 基本 mmap(2) 调用失败

c - 正在删除指向内存映射文件安全的最后一个链接

c++ - 平台无关的内存映射 [文件] IO

作为数据类型的 C 结构

c - 如何在 C 中按下按键退出 time_delay 循环?

c - 你如何交换矩阵中的两行(在 C 中)?

c - 我如何从单个文件描述符分配多个 MMAP?

c - 如何检测特定页面是否映射到内存中?