gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 20:13:31 25 4
gpt4 key购买 nike

我有 file1.txt

This is my file

和file2.txt

This is my second file

我想使用 memcpy 将 file2.txt 内容复制到 file1.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);
}

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

编辑:我的完整代码

#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/time.h>
#include <string.h>

int da_open(const char *name);
int da_open2(const char *name);
void *da_map(int d, int size);
int da_cp(void *str1, const void *str2, size_t n);

int da_open(const char *name){
int dskr;
dskr = open( name, O_RDONLY, 0640 );
if( dskr == -1 ){
perror( name );
exit( 255 );
}
printf( "dskr = %d\n", dskr );
return dskr;
}

int da_open2(const char *name){
int dskr;
dskr = open( name, O_RDWR, 0640 );
if( dskr == -1 ){
perror( name );
exit( 255 );
}
printf( "dskr = %d\n", dskr );
return dskr;
}

void *da_map(int d, int size){
void *a = NULL;
a = mmap( NULL, size, PROT_READ | PROT_WRITE, MAP_SHARED, d, 0 );
if( a == MAP_FAILED ){
perror( "mmap failed" );
abort();
}
return a;
}

int da_cp(void *str1, const void *str2, size_t n){
memcpy(str1, str2, n);
}

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);
}
}

最佳答案

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

如果您想从一个文件复制到另一个文件,则必须先读取第一个文件。这是如何执行此操作的示例:

#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 内存)

关于C 将带有 memcpy 和 mmap 文件的文件复制到 RAM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30001397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com