У меня есть существующая программа, в которой сообщение (например, электронное письмо или другой вид сообщения) будет входить в программу на stdin.Я знаю, что stdin - это ФАЙЛ *, но я не совсем понимаю, какие у него особые характеристики.В настоящее время я пытаюсь добавить проверку в программу и обработать сообщение по-разному, если оно содержит определенную строку (скажем, слово «привет»).Проблема в том, что мне нужно поискать в файле это слово, но мне все еще нужно, чтобы 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
}
Проблема в том, что для поиска в теле сообщения мне нужно прикоснуться к указателю файла stdin.Но, если мне все еще нужно открыть и прочитать сообщение во втором операторе if (если type = 'm'), stdin должен указывать на то же место, на которое он указывал в начале программы.Я попытался создать копию указателя, но был успешным только при создании копии, которая также изменила бы стандартный ввод, если изменился сам.
У меня нет выбора, как передать сообщение - оно должно оставаться наSTDIN.Как я могу получить доступ к реальному телу сообщения, поступающего на стандартный ввод, не изменяя сам стандартный ввод?По сути, как я могу читать с него, а затем сделать так, чтобы другая функция могла читать и с начала сообщения?