首页 > 编程语言 > 详细

c/c++ 通过 内存映射 方法同步修改文件内容

时间:2014-03-20 18:32:39      阅读:591      评论:0      收藏:0      [点我收藏+]

有时候我们要修改文本文件的内容。由于c语言没有直接修改文本内容的函数。一种方法是创建一个新的txt,读取原来的txt文件,然后把需要的文本写到第二个txt文件中,这种方法并不是很理想。而且很不容易控制。幸好的是c语言有一个mmap函数供我们直接将txt存入内容,并且在内容中修改同步到本地磁盘文件。


这是我的txt(test.txt)

000000001111000000

我们要把里面的0全部换成1。


源代码为

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

int main(int argc, const char * argv[])
{
    int fd;
    unsigned char *start;
    struct stat sb;
    fd = open("test.txt", O_RDWR);
    fstat(fd, &sb); /* 取得文件大小 */
    start = (unsigned char *)mmap(NULL, sb.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
    if(start == MAP_FAILED) /* 判断是否映射成功 */
    {
        printf("映射失败,文件过大或者没有权限");
        return 1;
    }
    printf("%s", start);
    
    unsigned long i = 0;
    while (i < sb.st_size)
    {
    	if(‘0‘ == *(start + i))
    	{
    		*(start + i) = ‘1‘;
    	}
    	i++;
    }
 	close(fd);
    munmap(start, sb.st_size); /* 解除映射 */
    return 0;
}


这时我们重新打开test.txt发现

里面全是1.成功!!!!!!!

c/c++ 通过 内存映射 方法同步修改文件内容,布布扣,bubuko.com

c/c++ 通过 内存映射 方法同步修改文件内容

原文:http://blog.csdn.net/zwc2xm/article/details/21634413

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!