从 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,我认为它不可移植。
我正在尝试打开一个 .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,我认为它不可移植。