#include <stdio.h>
#include <windows.h>
#include <time.h>
//文件名称
const char file_name[] = "C:\/Windows\/System32\/notepad.exe";
//开辟堆区首地址
char* process_content_buff;
//每次传输大小
int count = 1023;
//总计传输多少次
int n = 0;
char* generateRandomFileName(char* prefix) {
// 初始化随机数种子
srand(time(NULL));
char* randomFileName = (char*)malloc(strlen(prefix) + 20 * sizeof(char));
// 预留足够空间
if (randomFileName == NULL) {
printf("Memory allocation failed\n");
exit(EXIT_FAILURE);
}
// 使用当前时间戳和随机数生成文件名
time_t t = time(NULL);
struct tm now;
localtime_s(&now, &t);
//sprintf(randomFileName, "%s_%d%02d%02d_%02d%02d%02d_%ld.txt", prefix, now.tm_year + 1900, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, rand());
sprintf_s(randomFileName, MAX_PATH, "%s_%d%02d%02d_%02d%02d%02d_%ld.txt", prefix, now.tm_year + 1900, now.tm_mon + 1, now.tm_mday, now.tm_hour, now.tm_min, now.tm_sec, rand());
return randomFileName;
}
int ProcessRead() {
FILE* pfile = NULL;
int ferr = fopen_s(&pfile, file_name, "rb");
//获取文件指针
//获取文件大小
fseek(pfile, 0, SEEK_END);
int pfile_size = ftell(pfile);
//文件指针回到开始位置
rewind(pfile);
//申请内存
process_content_buff = (char*)calloc(pfile_size, 1);
char* buffer_cache = process_content_buff;
//count = (pfile_size / count) + 1;
n = (pfile_size / count) + 1;
//if (pfile_size / count)
//{
// n = (pfile_size / count) + 1;
// //没有整传,剩余部分大小
// return pfile_size % count;
//}
//else
//{
// n = pfile_size / count;
//}
//读取文件到内存buff中,count 值怎么求?,没有必要分块传输
while (n--) {
size_t fsize = fread(buffer_cache, 1, count, pfile);
buffer_cache = buffer_cache + count;
printf("读取fsize个字节%d\n", fsize);
}
FILE* w_pfile = NULL;
char* fileName = generateRandomFileName((char*)"file");
fopen_s(&w_pfile, fileName, "wb");
fwrite(process_content_buff, 1, pfile_size, w_pfile);
fclose(pfile);
free(process_content_buff);
free(buffer_cache);
return (int)&process_content_buff;
}
int main() {
int pro_mem;
//返回内存编号
pro_mem = ProcessRead();
/*printf("%p",pro_mem);*/
return 0;
}
学后感:滴水三期的课已经刷完一遍了,现在处于啥都知道点,但是具体下来发现什么也不会。当时学的第一遍的时候也没有跟着做作业,越学到后面的时候就会发现基本都是之前的知识,真是印证了那句话:【基础不牢,地动山摇】本末倒置了。感觉自己代码功底特差,在从头学一遍PE,先从文件读写开始,代码重头敲起来。
很多细节发到这里感觉太乱了,就没有发了。学到这里的同学有什么不明白的可以来问我,知无不言言无不尽。