C- Необходимо симулировать стандартный ввод кода при вызове функции. - PullRequest
1 голос
/ 09 декабря 2010
while( (reader=fread(array, sizeof(char), size, stdin))>0 )

У меня есть такой охранник, который мне нужен в этом цикле, когда я вызываю функцию, я хочу смоделировать, что я что-то даю fread.

Извините за ужас.

Ответы [ 3 ]

3 голосов
/ 29 июня 2011

@ Ответ Фричи с комментарием @Ben Voigt представляет собой портативное решение.

Если вы работаете в Unix / Linux / подобном, вы можете записать что-то в stdin с помощью

int p[2];

// error return checks omitted
pipe(p);
dup2(p[0], STDIN_FILENO);

FILE *stdin_writer = fdopen(p[1], "w");

Теперь напишите в stdin_writer.

См. pipe, dup2, fdopen в стандарте POSIX.

2 голосов
/ 09 декабря 2010

Вы можете заменить stdin ФАЙЛОМ * на ваш выбор для тестирования:

FILE *test = fopen("mytestFile.txt", "r");
/* your code here... */

Или когда нужен стандартный ввод:

FILE *test = stdin;
/* your code here... */
1 голос
/ 31 июля 2018

Этот ответ построен на комментарии @Ben Voigt. Создайте input.txt с некоторым текстом и main.c с этим кодом. Код вставит input.txt текст в стандартный ввод, а затем отправит его в стандартный вывод.

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

int main()
{
    freopen("input.txt", "r", stdin);

    unsigned int BLOCK_SIZE = 3;
    char buffer[BLOCK_SIZE];
    for(;;) {
        size_t bytes = fread(buffer,  sizeof(char),BLOCK_SIZE,stdin);
        fwrite(buffer, sizeof(char), bytes, stdout);
        fflush(stdout);
        if (bytes < BLOCK_SIZE)
            if (feof(stdin))
                break;
    }

    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...