在c中复制可执行文件

时间:2017-03-11 22:21:37

标签: c file-io io

我正在尝试在我的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。

任何帮助都将不胜感激。

感谢。

1 个答案:

答案 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);