Как я могу использовать C ++ для записи в открытый терминал
В linux есть 7+ шагов:
1) открыть терминал
I find ctrl-alt t most convenient
press and hold ctrl and alt, then press t
There is also a selection LXTerminal on a mouse menu
Note - There is a way for your program to open a 'default' terminal,
and c++ can use the technique, but it is not c++, and I always seem to
need to change the defaults for my use.
2) используя терминал, вы вручную находите имя терминала по:
type the command "tty" into the terminal
Typical response on my system:
hostname@username:~$ tty
/dev/pts/1
Имя терминала всегда имеет вид "/ dev / pts / x" в моей системе Linuxгде x - это число.
3) Для моих программ (которые используют второй терминал) мой код принимает часть x (ответа терминала) в качестве параметра команды 1 и использует этот параметр для созданияимя файла пути (PFN) к терминалу.
std::string aTermPFN = "/dev/pts/"; // partial address
aTermPFN += argv[1]; // ouput tty identified by argv[1]
// creating /dev/pts/<argv[1]>
// thus creating PFN of "/dev/pts/1"
4) Мой код обычно предоставляет подтверждение номера во время создания.(рекомендуется)
std::cout << "accessing '" << aTermPFN
<< "' with std::ofstream " << std::endl;
5), а затем создает (или пытается создать) объект ofstream
std::ofstream* ansiTerm = new std::ofstream(aTermPFN);
6) и выполняет несколько проверок на нем ...
if (!ansiTerm->is_open())
{
std::cerr << "Can not access '" << aTermPFN << "'" << std::endl;
assert(0); // abort
}
7) Когда закончите с термином, обязательно очистите
ansiTerm->close();
delete ansiTerm;
// вы можете избежать удаления, если используете соответствующий умный указатель.
Теперь все выходные данные этого 2-го терминала используют объект ansiTerm, в этом коде я использую более общий термин (не указатель, а ссылку): "termRef".
Примеры использования
// mostly, in the app where these sample exist, I output text at computed
// screen locations
// ansi terminals provide goto row col ansi functions
// the style is simply position the cursor,
termRef << m_ansi.gotoRC(3, col) << ss.str() << std::flush;
// then output text-----------------^^^^^^^^ (ss is stringstream)
// ansi terminals can clear
void clearScr() { termRef << m_ansi.clrscr() << std::flush; }
// ansi terminals can draw simple borders (not-fancy)
{ // across top gotoRC (int row, int col )
termRef << m_ansi.gotoRC ( tlcRow, tlcCol+1);
for ( int i=0; i<borderWidth; ++i) termRef << m_acs.HLINE;
termFlush();
}