У меня есть n файлов, и моя программа должна объединить содержимое всего в один файл, используя потоки и временные файлы (необходимо использовать tmpfile ()).При создании потока он должен объединить 2 файла во временный файл (temp1), затем другой поток объединит следующие 2 файла в другой временный файл (temp2) и т. Д., А на следующем уровне другой поток должен объединить temp1 с temp2 вдругой временный файл.
![alt text](https://i.stack.imgur.com/7nbWC.png)
Я думал о создании массива имен файлов, передавая его в качестве аргумента pthread_create, и функция должна возвращать измененный массив, но я не могупонять, как получить имя временного файла.Будет что-то вроде этого:
int main(int argc, char *argv[]){
int n = argc -1;
char *files_arr[n];
pthread_t threads[n-1];
}
for (int i=0; i < argc; i++)
{
pthread_create (&threads[i], NULL, temp_merge, (void *) &files_arr);
}
}//end main
void *temp_merge (void *arg){
char *myarray[];
myarray = (char *) arg;
FILE *f1, *f2, *tf;
tf = tmpfile();
//code to merge f1 and f2 into tf, f1 and f2 could be temp files created before
pthread_exit((void*) myarray); //Do I lose the temp file using pthread_exit?
}
Вопрос: как я могу получить доступ к временному файлу, открытому ранее с помощью tmp () в предыдущем потоке, чтобы сгенерировать новые временные файлы?