日期:2014-05-16  浏览次数:20683 次

open一个程序写入缓存,open创建新程序,写入,结果无法运行。
本帖最后由 ZDW86 于 2013-05-26 22:19:09 编辑
/*open一个程序写入缓存,open创建新程序,写入,结果无法运行。*/
/*代码如下,坐等高手解答*/
/*helloword 小程序而已,只有4kb多一些*/

#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

unsigned int cal_crc(unsigned char *ptr, unsigned int len);

void main()
{
unsigned int nCal;
unsigned int nCal2;
int FD, FDNEWDATA,FDNEWDATB;
int FDsize;
int nNumber;
char buf[6] = {'0'};
char cLastOne;
char *pcEatbuf = (char*)malloc(3000);
char *pcEatbuf2;
FD = open("./helloworld",O_RDONLY);
FDsize = lseek(FD, 0, SEEK_END);


pcEatbuf = (char*)malloc(FDsize);
lseek(FD, 0, SEEK_SET);
nNumber =read(FD, pcEatbuf, 3000);

cLastOne = (char)*(pcEatbuf+FDsize-1);

pcEatbuf2 = (char*)malloc(FDsize - 3000);

read(FD, pcEatbuf, 3000);

lseek(FD, 3000, SEEK_SET);

read(FD, pcEatbuf2, FDsize - 3000);

close(FD);

//////////////////////////////////////////////////////////
nCal = cal_crc(pcEatbuf,4831);
printf("pcABCD=%d\n",nCal);

nCal = FDsize - 3000;
printf("FDsize=%d\n",FDsize);

nCal2 = cal_crc(pcEatbuf2,1831);

printf("nCal2=%d\n",nCal2);

///////////////////////////////////////////////////////////////

FDNEWDATA = open("./hellocopy2",O_WRONLY|O_CREAT,0777);
write(FDNEWDATA, pcEatbuf, 3000);
close(FDNEWDATA);

FDNEWDATB = open("./hellocopy",O_WRONLY);
lseek(FD, 3000, SEEK_SET);
write(FDNEWDATB, pcEatbuf2, FDsize - 3000);
close(FDNEWDATB);

}



unsigned int cal_crc(unsigned char *ptr, unsigned int len) { 
  unsigned char i; 
  unsigned int crc=0; 
  while(len--!=0) { 
    for(i=0x80; i!=0; i/=2) { 
      if((crc&0x8000)!=0) {crc*=2; crc^=0x1021;} /* 余式CRC乘以2再求CRC        */ 
        else crc*=2; 
if((*ptr&i)!=0) crc^=0x1021;             /* 再加上本位的CRC */ 
    } 
    ptr++; 
  } 
  return(crc); 

open write read

------解决方案--------------------
大哥./helloworld这个是什么设备啊,不要说是二进制可执行文件哦!