从 C 程序内部写入 stdin

Write in stdin from inside a program in C

我正在尝试打开一个 .txt 文件并将其内容放入标准输入。我知道你能做到:

myapp < input.txt

但我想在程序中多次使用相同的内容,我认为使用此方法会消耗标准输入内容,无法再次使用。

我想测试一个从 stdin 读取的函数,作为我正在尝试的示例:

void myFunction(int number)
{
    // The function already writen reads from stdin using the argument.
}

void fillStdin(void)
{
    FILE* myFile;
    myFile = fopen("myfile.txt", "r");

    // Put the content of the file in stdin

    fclose(myFile);
}


int main(void)
{
    int myArray[5] = {1, 2, 3, 4, 5};
    for (int i = 0; i < 5; i++)
    {
        fillStdin();
        myFunction(myArray[i]);
    }

    return 0;
}

无需修改您的代码。像这样执行你的程序(假设你使用的是 Unix):

while true; do cat input.txt; done | myapp

这将一遍又一遍地向您的 stdin 提供 input.txt。考虑到您需要弄清楚每次循环结束的时间,因为 stdin 永远不会以这种方式结束。

这是一个简单的示例,说明如何将标准输入读入存储缓冲区和文件。

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

#define MAXLINELENGTH 4096

FILE *fin;
char fileName[] = "temp.txt";

void processLine(char *line)
{

    fin = fopen(fileName, "a");
    fputs(line, stdout);
    fputs(line, fin);
    fclose(fin);
    return;
}

int main()
{
    char line[1024];
    char input[MAXLINELENGTH];

    printf("enter continuous text, and ~ when finished\n");

    while (fgets(line, 1024, stdin) != NULL)
    {
        processLine(line);
        if(strstr(line, "~")) //enter a "~" to exit program
              return 0;
    }

    return 0;

}

获得文件后,您可以使用 fopen()fgets() 从中读取,然后将其写回标准输出。

您可以像这样轻松写入标准输入:

char *buffer = malloc(bufsize * sizeof(char));
... //get file contents etc.
write(STDIN_FILENO, buffer, bufsize); //the important part.

您需要包括 unistd.h,我认为它不可移植。