将memcpy和mmap文件复制到RAM的C文件

时间:2015-05-02 10:51:57

标签: c io mmap memcpy

我有file1.txt

git clone --depth=1 <remote_repo_url>

和file2.txt

This is my file

我希望使用This is my second file

将file2.txt内容复制到file1.txt
memcpy

} 我不知道为什么,但是当我运行这个时,我得到了带有大量随机符号的file2.txt。为什么?我做错了什么?

编辑: 我的完整代码

int main( int argc, char * argv[] ){
    int d;
    int d2;
    int p;
    FILE *f1;
    FILE *f2;
    if(argc == 3){
        f1 = fopen(argv[1], "r+");
        f2 = fopen(argv[2], "r+");
            d = da_open(argv[1]);
            d2 = da_open2(argv[2]);
            p = da_cp(f2, f1, 10); 
            da_map(d, 10);
            da_map(d2, 10);

            close(p);
            //closef(d2);
    }

2 个答案:

答案 0 :(得分:1)

memcpy对文件描述符不起作用,您可以将file1的内容存储在字符数组中(使用fgetsfread),然后复制到file2(使用fputsfwrite

另请注意,您需要使用fclose()代替close() fopen()

答案 1 :(得分:1)

dd2不是文件,它们只是文件描述符(存储有关文件及其输入/输出状态的信息)。

如果要从1个文件复制到另一个文件,则必须先读取第一个文件。这就是你如何做到这一点的例子:

#include <stdio.h>
#include <stdlib.h>

// Open the first text file
FILE *f = fopen("textfile1.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);

// Read it into buffer
char *buffer = malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);

buffer[fsize] = 0;

// Now write the string buffer into your second text file
FILE *f2 = fopen ("textfile2", "wb");
fwrite (buffer, sizeof(char), sizeof(buffer), f2);
fclose (f2);

因此,正如您所见,memcpy只能在RAM中执行内存,并且与硬盘中的文件无关(除非您将其读入RAM内存)