Chinaunix首页 | 论坛 | 博客
  • 博客访问: 648449
  • 博文数量: 156
  • 博客积分: 4833
  • 博客等级: 上校
  • 技术积分: 1554
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-21 19:36
文章分类

全部博文(156)

文章存档

2016年(2)

2013年(1)

2012年(13)

2011年(30)

2010年(46)

2009年(29)

2008年(23)

2007年(12)

分类: C/C++

2007-06-21 22:02:18

 
#include
#include
#include
#include
#include
#include
#include
#if 1
#define dbprint(format,args...)  printf("file: %s \nline: %d \n" format,__FILE__,__LINE__,##args)
#endif
#define Mbuflen 512

int WrRecord(char *pc_File,char* pc_content)
{
        int  Rcfd;
        size_t datalen;
        void *src;
        char *buf;
        struct stat filestat;
      
     
  if((pc_File == NULL )||(pc_content ==NULL))
          {
                  dbprint("?  \n");
                  return 0;
          }
       
  datalen = strlen(pc_content);
 
  //keep tail & \0
  if(datalen >= Mbuflen)
     {
      pc_content = pc_content+datalen+1 - Mbuflen;
      datalen = Mbuflen - 1;
            
     }
        
        Rcfd = open(pc_File,O_RDWR|O_CREAT,S_IRUSR|S_IWUSR);
        if (Rcfd <= 0 )
                {
                        dbprint("fileno error \n");
                        return -1;
                }
   /* get file size */
  if (fstat(Rcfd, &filestat) < 0) 
    {
            dbprint("filestat error \n");
                        return -1;
    }   
   
   if(filestat.st_size   {
        /* set size of output file */
      if (lseek(Rcfd, Mbuflen-1, SEEK_SET) == -1)
        {
                dbprint("filesize error \n");
                            return -1;
        }   
       
      if (write(Rcfd,"", 1) != 1)
      {
                dbprint("write error \n");
                            return -1;
      }   
   
    
   }
   
  src = mmap(NULL, Mbuflen, PROT_READ | PROT_WRITE, MAP_SHARED,Rcfd,0 );
  if(src == MAP_FAILED)
          {
                  dbprint("mmap error\n");
                        return -1;
          }
         
         
  buf = malloc(Mbuflen);
  if(buf == NULL)
          {
                  dbprint("malloc error \n");
                        return -1;
          }         
         
        
         
          memset(buf,0,Mbuflen); 
          memcpy(buf,src,((filestat.st_size                                              
          memmove(buf,buf+datalen+1,Mbuflen-datalen-1);         
          memcpy(buf+Mbuflen-(datalen+1),pc_content,(datalen+1)); 
         
          memcpy(src,buf,Mbuflen);
         
          free(buf);
    munmap(src,Mbuflen);
    close(Rcfd);       
 
    return 0;
       
       
}
//测试一下
int main(int argc,char **argv)
{
        if(argc!=3)
                {
                        printf("input filename data \n");
                        return -1;
                }
               
               
  WrRecord(argv[1],argv[2]);
  return 0;
       
}
阅读(1278) | 评论(0) | 转发(0) |
0

上一篇:scanf

下一篇:进程分配到指定CPU API

给主人留下些什么吧!~~