У меня есть приложение на Linux C++, перенесенное с ОС Solaris, и приложение должно написать некоторые текстовые данные через 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;
}
... Тогда я использовать запись():
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 [имя пользователя], и тесты в терминале не имели никаких предупреждений или ошибок. В то же время я попытался удалить «-no-tty» в параметрах gpg, но с тем же результатом - я получил предупреждение в debug/Output и gpg был непригодным (errno 9). –
Является ли ERR тем же FD, что и STDERR? Вы пытались сделать то же самое без закрытия() ERR? Для меня это похоже на то, что GnuPG жалуется на то, что не имеет STERR и ему нужно его снова открыть. Я просто сделал int main (void) { FILE * fp = popen ("gpg2 -r 1346E6A5 -e -o /tmp/out.pgp", "w"); write ("foo", fp, 4); return (0); } – SunTsu
Я пробовал в обоих направлениях. И когда я попытался имитировать действие с помощью команды, gpg (gpg -e -r имя пользователя -o filename) не записывал текст с клавиатуры в файл. gpg сделал файл, он сделал только заголовок. –