Генерация необработанного потока битов в качестве вывода на канал в другом программном обеспечении - PullRequest
0 голосов
/ 13 ноября 2018

Итак, я боролся со следующей проблемой: У меня есть текстовый файл с миллионами случайных чисел. Это чистый текст. Я хочу передать это на вход другого программного обеспечения, которое должно было получить поток битов (Dieharder - это программное обеспечение). Он работает с / dev / urandom, например:

cat /dev/urandom | ./dieharder <options>

Я создал подобную подпрограмму C для генерации двоичного необработанного выходного потока. Он преобразует код ASCII в десятичный (например, 0x0F = 15) и передает его в стандартный вывод:

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
int ASCIItoDec(char c);

int main(int argc, char *argv[])
{
    FILE *fpr;
    FILE *fpw;
    unsigned int i = 0;
    size_t size=0;
    char c;       
    unsigned int *buffer; 
    char *filename;
    buffer = (unsigned int *) malloc(100);
    filename = (char *) malloc(128);

    if (argc != 2) 
    {
        scanf("%s", filename);
        fpr = fopen(filename, "rb");
    }
    else 
    {
        filename = (char *) realloc(filename, strlen(argv[1] + 1));
        strcpy(filename, argv[1]);
        fpr = fopen(filename, "rb");
    }
    if (fpr == NULL)
    {
        return -1;
    }
    while (c = fgetc(fpr) != EOF)
    {
        size++;
    }
    rewind(fpr);
    buffer = (int *) realloc(buffer, (size)*sizeof(int));
    memset(buffer, 0, sizeof(buffer));
    i=0;
    c = fgetc(fpr);
    while (c != EOF)
    {
       if ((c != ' ') && (c != '\r') && (c != '\n') && (c != '\t'))
       {
            buffer[i] = (unsigned int) ASCIItoDec(c);
       }
       else if (c == ' ')   
       { 
            buffer[i] = ' ';
       }
       c = fgetc(fpr);
       i++;
    }   
    fclose(fpr);
    i=0;
    //streaming output
    fwrite(buffer, size*sizeof(buffer), 1, stdout);
    return 0;   
}

Программное обеспечение Dieharder завершает работу, сообщая, что EOF был достигнут, не выполняя никакого анализа. Что может быть не так?

1 Ответ

0 голосов
/ 19 ноября 2018

Проблема была с правилами входного файла программного обеспечения.Двоичный файл был сгенерирован правильно.Спасибо.

...