Я знаю, что есть похожие вопросы о EOF и CTRL + D, но у меня есть более конкретный вопрос. Насколько я понимаю, CTRL + D сигнализирует об окончании STDIN и обрабатывается компьютером, а не запущенным приложением. Тем не менее, мне нужно предоставить отзыв пользователю моей программы о символе EOF, набранном с помощью (CTRL + D) или содержащемся во входном файле, содержащем команды. Как бы я это сделал?
Я включил свой простой код о том, как я думал это сделать, но он не работает по понятным причинам:
#include <iostream>
#include <string>
using namespace std;
int input()
{
string cmdstring;
cin >> cmdstring;
if (cmdstring == "bye") //Exit on "bye" command
{
return 1;
}
else if (cmdstring == "^D") //Exit on EOF character CTRL+D
{
return 2;
}
else //Continue shell prompt
{
return 0;
}
}
Я пытаюсь написать свою собственную оболочку и хочу предоставить статус выхода при выходе из оболочки. Большое спасибо!
Редактировать:
Я изменил его на cin.eof (), но он все еще не работает.
else if (cin.eof()) //Exit on EOF character CTRL+D
{
return 2;
}
Кроме того, я забыл упомянуть, что этот код является функцией, выполняющейся в цикле, поэтому пользователь
постоянно запрашивается, пока они не предоставят «пока» или пока не будет прочитан символ EOF.
int exitstatus = 0; //Tracks exit code status
do {
exitstatus = input();
} while (exitstatus == 0);
В приложение не передан символ «^ D». Оболочка перехватывает символ «^ D» и закрывает поток, в результате чего приложение больше не регистрирует ввод. В результате этого I/O
система устанавливает состояние EOF на стандартный ввод.
Этот код работает для меня:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string cmdstring;
cin >> cmdstring;
if(cmdstring == "bye") //Exit on "bye" command
{
return 1;
}
else if(cmdstring == "^D") //Exit on EOF character CTRL+D
{
return 2;
}
else if(cin.eof()) // pressing Ctrl-D should trigger this
{
return 3;
}
return 0;
}
прессование Ctrl-D
должен вернуть код ошибки 3