我有一个现有程序,其中一条消息(例如,电子邮件或其他类型的消息)将进入标准输入上的程序。我知道 stdin 是一个 FILE* 但我对它还有哪些其他特殊特性感到有些困惑。我目前正在尝试向程序添加检查,如果消息包含特定行(例如,单词“hello”),则以不同方式处理消息。问题是,我需要在文件中搜索该单词,但我仍然需要 stdin 稍后在程序中指向其原始位置。结构概要如下:
目前:
//actual message body is coming in on stdin
read_message(char type)
{
//checks and setup
if(type == 'm')
{
//when it reaches this point, nothing has touched stdin
open_and_read(); //it will read from stdin
}
//else, never open the message
}
我想添加另一个检查,但我必须在其中搜索邮件正文。像这样:
//actual message body is coming in on stdin
read_message(char type)
{
//checks and setup
//new check
if(message_contains_hello()) //some function that reads through the message looking for the word hello
{
other_functionality();
}
if(type == 'm')
{
//when it reaches this point, my new check may have modified stdin
open_and_read(); //it will read from stdin
}
//else, never open the message
}
问题是要搜索消息正文,我必须触摸文件指针标准输入。但是,如果我仍然需要打开并阅读第二个 if 语句中的消息(如果 type = 'm'),stdin 需要指向它在程序开始时指向的同一个位置。我尝试创建指针的副本,但仅成功创建了一个副本,该副本在修改自身时也会修改标准输入。
我无法选择如何传递消息 - 它必须保留在标准输入上。如何在不修改标准输入本身的情况下访问进入标准输入的消息的实际正文?基本上,我怎样才能从中读取,然后让另一个函数也能够从消息的开头读取?