头文件
使用的头文件是threads.h编译标准需c11以上
#include <threads.h>
定义宏和结构体
#define BLOCK_SIZE 10485760 //块读取的大小,这里为10mb
#define NUM_BLOCKS 3 //线程开辟数
typedef struct {
char* block; //读取到的数据
int len; //fread读到的长度,防止长度不足时输出乱码
} Data;
线程函数
// 假设的加密函数
void encrypt_block(Data* data) {
// 实现加密逻辑
for (int i = 0; i < data->len; ++i) {
data->block[i] ^= 0x0F; // 示例加密操作
}
}
// 线程函数
int thread_function(void* arg) {
Data* data = (Data*)arg;
encrypt_block(data);
return 0;
}
main函数
int main() {
FILE* file = fopen("encrypted.txt", "rb");
if (file == NULL) {
perror("Error opening file");
return EXIT_FAILURE;
}
Data data[NUM_BLOCKS];
// 读取文件块
for (int i = 0; i < NUM_BLOCKS; ++i) {
data[i].block = malloc(BLOCK_SIZE);
if (data[i].block == NULL) {
perror("Memory allocation failed");
fclose(file);
return EXIT_FAILURE;
}
//获取实际输入长度
data[i].len = fread(data[i].block, 1, BLOCK_SIZE, file);
}
fclose(file);
// 创建线程
thrd_t threads[NUM_BLOCKS];
for (int i = 0; i < NUM_BLOCKS; ++i) {
//printf("%d\n", strlen(blocks[i]));
//if(strlen(blocks[i]))
if (thrd_success != thrd_create(&threads[i], thread_function, &data[i])) {
perror("Thread creation failed");
return EXIT_FAILURE;
}
}
// 等待线程完成
for (int i = 0; i < NUM_BLOCKS; ++i) {
thrd_join(threads[i], NULL);
}
// 写入新文件
FILE* new_file = fopen("encrypted.txt", "wb");
if (new_file == NULL) {
perror("Error opening new file");
for (int i = 0; i < NUM_BLOCKS; ++i) {
free(data[i].block);
}
return EXIT_FAILURE;
}
for (int i = 0; i < NUM_BLOCKS; ++i) {
if (data[i].len > 0)
fwrite(data[i].block, data[i].len, 1, new_file);
if(!data[i].block)
free(data[i].block); // 释放内存
}
fclose(new_file);
return EXIT_SUCCESS;
}