我正在尝试在我的c程序中复制可执行文件。请参阅以下代码:
int dumpDaExecutable(char *progpath){
char *base, *basec;
basec = strdup(progpath);
base = basename(basec);
printf("%s\n", base);
//rename(progpath, base);
FILE *ptr_of, *ptr_nf;
int x;
ptr_of = fopen(basec, "rb");
ptr_nf = fopen(base, "wb");
if(ptr_of == NULL){
printf("Old file is NULL\n");
return 1;
}
if(ptr_nf == NULL){
printf("New file is NULL\n");
fclose(ptr_of);
return 1;
}
unsigned char c[4096];
while(1){
//printf("in the while!\n");
x = fread(c, 1, 4096, ptr_of);
if(x < 1){
if(x == 0)
printf("success");
break;
}
if(fwrite(c, x, 1, ptr_nf) != 1){
break;
}
}
fclose(ptr_nf);
fclose(ptr_of);
//free(base);
//free(basec);
return 0;
}
我传递的progpath是* / program - 其中*是父文件夹,program是实际的可执行文件。运行程序后,创建的新文件为空。我很困惑为什么会这样。复制可执行文件时是否需要做些不同的事情?
程序文件的权限设置为777。
任何帮助都将不胜感激。
感谢。
答案 0 :(得分:0)
你需要:
if(fwrite(c, 1, x, ptr_nf) != x){
// display error
break;
}
要复制文件,您可以执行以下操作:
while fread(..)
fwrite(..);
#define
缓冲区大小也是一个好习惯:
#define BUFF_SIZE 4096
// or use const int buffSize = 4096;
unsigned char c[BUFF_SIZE];
x = fread(c, 1, BUFF_SIZE, ptr_of);