Я пишу простую программу на C, которая позволяет мне копировать файл в каталоге.
Я хочу, чтобы эти файлы копировались параллельно, чтобы я мог дать программе новые «запросы на копирование», даже когдаеще не все файлы были скопированы.Я хочу, чтобы копирование происходило одновременно.
#include <stdio.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
#include <pthread.h>
#include <unistd.h>
#include <stdlib.h>
char source_name[256]; /* source file name */
char target_name[256]; /* target file name */
int sourcefile, targetfile;
FILE *logfile;
#define SIZE 4096
typedef struct {
unsigned long size;
} FILEBLOCK;
void *copythread(void *arg);
void read_source_target(void) {
FILEBLOCK file;
struct stat f_stat;
printf("Source name: ");
scanf("%s", source_name);
printf("Target name: ");
scanf("%s", target_name);
stat(source_name, &f_stat);
printf("Size of file is %lu bytes.\n", f_stat.st_size);
file.size = f_stat.st_size;
pthread_t thread_id;
pthread_create(&thread_id, NULL, copythread, &file);
}
void *copythread(void *arg) {
FILEBLOCK *file;
char data[SIZE];
int i, x;
file = (FILEBLOCK *) arg;
sourcefile = open(source_name, O_RDONLY);
targetfile = open(target_name, O_WRONLY | O_CREAT, 0666);
while (i < file->size) {
x = read(sourcefile, data, SIZE);
write(targetfile, data, x);
i += x;
}
close(targetfile);
close(sourcefile);
return NULL;
}
int main() {
while (1) {
read_source_target();
}
}
Я пытаюсь использовать 'pthread_create' для создания нового потока при каждом вводе нового запроса на копирование.
Я проверил это с файлом 2 ГБ, чтобы я мог проверить этот параллелизм, но, похоже, он не работает.Я попытался скопировать файл 3 раза, и первая копия работает нормально, но две копии после не копируются полностью.
Как правильно реализовать параллелизм?
С уважением