我有從Solaris OS移植的Linux C++應用程序,應用程序需要通過gpg(或gpg2)將一些文本數據寫入加密文件。所以文本數據應該直接寫入gpg(加密文件)。 創建管道:在Linux中尋找正確的方式將加密文本從C++應用程序寫入加密的gpg文件
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;
}
... 然後我使用write():
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」,但結果相同 - 我在調試/輸出中收到了警告,並且gpg無法使用(errno 9)。 –
ERR是否與STDERR具有相同的FD?你有沒有嘗試做同樣的事情沒有關閉()錯誤?對我來說,看起來GnuPG抱怨沒有STERR並且不得不重新打開它。 我只是做了 int main(void) FILE * fp = popen(「gpg2 -r 1346E6A5 -e -o /tmp/out.pgp」,「w」);寫(「foo」,fp,4); return(0); } – SunTsu
我試過兩種方法。當我試圖用命令模擬動作時,gpg(gpg -e -r username -o filename)沒有將文本從鍵盤寫入文件。 gpg製作了這個文件,它只做了標題。 –