读书人

open一个程序写下缓存open创建新程序

发布时间: 2013-06-26 14:29:32 作者: rapoo

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这个是什么设备啊,不要说是二进制可执行文件哦!

读书人网 >UNIXLINUX

热点推荐