Как удалить последние 7 байтов из файла в C? - PullRequest
2 голосов
/ 30 сентября 2019

Я хочу сгенерировать ровно 125000000 байт или 10 ^ 9 бит случайных чисел, но вместо этого я получаю 125000007 байт данных. Как отрезать последние 7 байт из файла?

Я пробовал это

int truncate(const char *path, off_t length);
truncate("/tmp/F.bin", 7);

Это рабочий код:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>


union
{
    unsigned int uc;
    unsigned char byte[4];
} rand_data;

int main(){

        FILE * fp;

        fp = fopen("/tmp/F.bin", "wb");
        unsigned int size = 0;

        srand(501459);
        while(size <= 125000000) {
            rand_data.uc = rand();
            fprintf(fp, "%x%x%x%x", rand_data.byte[3], rand_data.byte[2], rand_data.byte[1], rand_data.byte[0]);
            size = ftell(fp);
        }
        printf("%d", size);
        fclose(fp);
        return 0;
    }

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Решением было изменить мое состояние на размер <125000000, а также от% x до% 02x, как рекомендовано. :) </p>

0 голосов
/ 30 сентября 2019

%x кажется неправильным спецификатором формата для этой работы, поскольку он может записать более одного байта.

Попробуйте использовать %c.

Также мне интересно, почему вы используете ftell. Я бы вместо этого:

size += 4;

.

Возможно, цикл вроде:

    while(size < 4*31250000) {
        rand_data.uc = rand();
        fputc(rand_data.byte[3], fp);
        fputc(rand_data.byte[2], fp);
        fputc(rand_data.byte[1], fp);
        fputc(rand_data.byte[0], fp);
        size += 4;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...