从C中的程序内部写入stdin

时间:2015-04-27 13:18:38

标签: c stdin

我正在尝试打开.txt文件并将其内容放在标准输入中。我知道你可以这样做:

<?php 
    if ($this->session->userdata("username")==$info->U_username){ ?
       <td><a href="<? echo  base_url() ; ?>/gamestalker/edit_content/<? echo $info->C_id ; ?>">EDIT</a></td>
  <?  }
?>

但我想在程序中多次使用相同的内容,我认为使用此方法会消耗stdin内容,不能再次使用。

我想测试一个从stdin读取的函数,就像我正在尝试的一个例子一样:

myapp < input.txt

3 个答案:

答案 0 :(得分:1)

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

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

这将一遍又一遍地向您的input.txt提供stdin。考虑到你需要弄清楚每次重复结束的时间,因为stdin永远不会这样做。

答案 1 :(得分:0)

这是一个简单的例子,说明如何将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()从中读取该文件,然后将其写回到stdout。

答案 2 :(得分:0)

你可以像这样轻松写入stdin:

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

你需要包含unistd.h,我不认为它是可移植的。