今天一网友问如何将一个文件内的所以'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) |