Solaris OSから移植されたLinux C++アプリケーションがあり、gpg(またはgpg2)を介してテキストデータを暗号化ファイルに書き込む必要があります。したがって、テキストデータはgpg(暗号化されたファイル)に直接書き込まれる必要があります。 )その後、私は(書き込みを使用暗号化されたテキストをC++アプリケーションから暗号化されたgpgファイルに書き込む正しい方法をLinuxで探す
if(pipe(pipes) == -1)
throw Exception("Error creating pipes");
switch(fork())
{
case -1:
throw Exception("fork() failure");
case 0: // child process
close(pipes[PIPE_PARENT]);
close(READ);
close(ERR);
if(dup(pipes[PIPE_CHILD]) != READ)
throw Exception("dup() failure, READ descriptor unavailable");
execlp("gpg", "gpg", "--no-tty", "-r", "username", "-e", "-o", "home/username/out.pgp", NULL);
break;
}
... : 私はパイプを作成
intWCount = write(intTextFD, strData.str().c_str(), strData.str().size());
その後、私はerrnoを== 9、intWCount = -1を参照してください。 STDOUTから は私が取得:
「のgpg:警告:標準エラーがリニューアルオープン、」
とテキストデータがファイルに書き込まれません。 私はUbuntu 16.04、gpg(GnuPG)1.4.20、gcc 5.4.0を使用します。
主な質問は、暗号化されたgpgファイルにテキストデータを安全に書き込む方法です。
ありがとうございました!
ありがとう、私は提案された方法を考えた。私は-r [username]スイッチを使い、端末のテストには警告もエラーもありませんでした。同時に私はgpgオプションで "--no-tty"を削除しようとしましたが、同じ結果を得ました。私はdebug/Outputで警告を受け取り、gpgは使用できませんでした(errno 9)。 –
ERRはSTDERRと同じFDですか? ERRを閉じることなく同じことをやってみましたか?私には、GnuPGはSTERRを持たず、再オープンする必要があると不平を言うようです。 私は単純にした intメイン(void) { FILE * fp = popen( "gpg2 -r 1346E6A5 -e -o /tmp/out.pgp"、 "w"); write( "foo"、fp、4); return(0); } – SunTsu
私は両方の方法を試しました。そして、コマンドでアクションをシミュレートしようとすると、gpg(gpg -e -r username -o filename)はキーボードからファイルにテキストを書き込まなかった。 gpgはファイルを作成し、ヘッダーのみを作成しました。 –