0

簡単なロギング プログラムを作成しています。ユーザーlog some_fileがコンソールに入ると、現在、プログラムは単純に から基本的な入力を受け取りcin、それを に記録しsome_fileます。

ただし、独自のエディターを で実装する代わりにcin、Nano エディターを開いて、ユーザーがそこでメッセージを編集できるようにしたいと考えています。

次に、メッセージが完成したら、C++ ロガーがそれを文字列として受け取り、続行するようにします。

これは、コミット時に git が行うこととまったく同じです。

どうすればこれを達成できますか?

(可能であれば、expect などのツールを使用せずに、生の C++ コードのみを使用します。)

4

3 に答える 3

3

ほとんどのエディターは通常のファイルで動作することを期待しているため、通常は一時ファイルを作成してから、そのファイルの名前をコマンドラインでエディターに渡します。エディターが戻ったら、コンテンツを一時ファイルからログにコピーしてから、ファイルを破棄します。

于 2013-01-08T15:11:29.890 に答える
1

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());

アップデート

DevSolar の提案に従って tmpnam() を使用する場合

char filename[L_tmpnam];
tmpnam(filename);
std::string cmd  = "/bin/nano " + filename
system(cmd.c_str());
unlink(filename);
于 2013-01-08T15:17:18.360 に答える
0

ファイルを開き(ファイル名をエディターに渡す)、保存してからプログラムから読み取るのはどうですか?私はいつもgitも同じように機能すると思っていました。

于 2013-01-08T15:11:53.237 に答える