Chinaunix首页 | 论坛 | 博客
  • 博客访问: 4842834
  • 博文数量: 930
  • 博客积分: 12070
  • 博客等级: 上将
  • 技术积分: 11448
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-15 16:57
文章分类

全部博文(930)

文章存档

2011年(60)

2010年(220)

2009年(371)

2008年(279)

分类: LINUX

2009-09-14 14:49:47

  今天一网友问如何将一个文件内的所以'a'变成'b',当时第一反应是fgets一行一行处理,繁琐,突然想到mmap,于是尝了下鲜!!
   首先stat,获得文件大小,mmap到一地址,注意这个是不用free的,我free了下居然segment default,还有就是好像不能追加写文件,至少我测试的是这样...
 

[root@kenthy test]# cat mmap.c
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char** argv)
{
  char* src;
  struct stat statbuf;
  int fd;

  if(stat("test.txt",&statbuf)<0)
   {
     printf("%s\n",strerror(errno));
     return -1;
    }

  if((fd = open("test.txt",O_RDWR,O_APPEND))==-1)
   {
     printf("%s\n",strerror(errno));
     return -1;
    }
  if((src =(char*)mmap(NULL,statbuf.st_size,PROT_READ|PROT_WRITE,MAP_SHARED,fd,0))==MAP_FAILED)
   {
     printf("%s\n",strerror(errno));
     return -1;
    }

  printf("%s", src);
  
  printf("begin process:\n");
 #if 0
  while(*src!='\0')
   {
    if(*src=='a')
      *src='1';

    src++;
   }
 #endif
 #if 1
  sprintf(src,"%s\n%s\n", src,"testtest");

  printf("%s", src);
 #endif
  return 0;
}

阅读(1555) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

ubuntuer2009-12-23 10:32:47

使用munmap 同步使用msync