Как убрать дублирование чисел в бинарном файле на си?

...
Для удаления дублирования чисел в бинарном файле на языке программирования C можно использовать следующий подробный алгоритм:

1. Открытие бинарного файла для чтения и записи с помощью функции fopen(), указывая режим доступа "rb+".

FILE* file = fopen(file_name, "rb+");

2. Чтение всех чисел из файла и сохранение их в массиве. Для этого нужно определить размер файла с помощью функции fseek() и ftell(), а затем с помощью функции fread() прочитать содержимое файла в память.

fseek(file, 0, SEEK_END);
long file_size = ftell(file);

rewind(file);

int num_elements = file_size / sizeof(int);
int* numbers = malloc(sizeof(int) * num_elements);

fread(numbers, sizeof(int), num_elements, file);

3. Закрытие файла после чтения.

fclose(file);

4. Создание нового файла для записи уникальных чисел без дубликатов. Для этого открываем файл с режимом "wb".

file = fopen(new_file_name, "wb");

5. Создание временного массива для отслеживания уже увиденных чисел.

int* seen_numbers = malloc(sizeof(int) * num_elements);
memset(seen_numbers, 0, sizeof(int) * num_elements);
// Инициализация массива нулями

6. Перебор всех чисел в исходном массиве и запись только уникальных чисел в новый файл. При этом во временном массиве отмечаем уже встреченные числа.

for (int i = 0; i < num_elements; i++) {
    if (!seen_numbers[i]) {
        fwrite(&numbers[i], sizeof(int), 1, file);
        
        for (int j = i + 1; j < num_elements; j++) {
            if (numbers[i] == numbers[j]) {
                seen_numbers[j] = 1;
            }
        }
    }
}

7. Освобождение памяти, закрытие файлов и удаление временного массива.

free(numbers);
free(seen_numbers);
fclose(file);

Таким образом, указанный алгоритм позволит избавиться от дублирующихся чисел в бинарном файле на языке C.