Как открыть Nano и получить строку из него в C ++?

Я создаю простую программу регистрации. Когда пользователь вводит log some_file в консоль, программа в настоящее время просто получает некоторые основные данные от cinи записывает это в some_file,

Однако вместо реализации моего собственного редактора с cinЯ хотел бы открыть редактор Nano и позволить пользователю редактировать свое сообщение там.

Затем, когда сообщение будет завершено, я бы хотел, чтобы мой регистратор C ++ получил его в виде строки и продолжил.

Это именно то, что делает git с коммитами.

Как мне этого добиться?

(Желательно без использования таких инструментов, как ожидаемо, просто необработанный код C ++.)

0

Решение

Если вы хотите использовать редактор Nano, вам нужно запустить функцию system (), чтобы вызвать Nano с временным файлом. Затем удалите файл позже ..

std::string filename = "/tmp/.out." + std::to_string(getpid());
std::string cmd = "/bin/nano " + filename
system(cmd.c_str());
// read from filename
unlink(filename.c_str());

Обновить

При использовании tmpnam (), как предложено DevSolar

char filename[L_tmpnam];
tmpnam(filename);
std::string cmd  = "/bin/nano " + filename
system(cmd.c_str());
unlink(filename);
1

Другие решения

Большинство редакторов рассчитывают работать с обычными файлами, поэтому обычно вы создаете временный файл, а затем передаете имя этого файла редактору в его командной строке. Когда редактор возвращается, вы копируете содержимое временного файла в свой журнал, а затем уничтожаете файл.

4

как насчет открыть файл (передать имя файла в редактор), сохранить и затем прочитать его из вашей программы? Я всегда думал, что Git работает так же.

0
По вопросам рекламы [email protected]