URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3291
[ Назад ]

Исходное сообщение
"подмена /dev/tty"

Отправлено igvas , 17-Авг-04 18:35 
Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump просит пароль не через stdin, то организовать pipe и передать через него пароль никак не получается. Я понимаю, что делами backup-a должен заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос: как передать pg_dump-у пароль, введенный пользователем в диалоге.

Содержание

Сообщения в этом обсуждении
"подмена /dev/tty"
Отправлено vint , 17-Авг-04 18:38 
>Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
>Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем
>потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через
>неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump
>просит пароль не через stdin, то организовать pipe и передать через
>него пароль никак не получается. Я понимаю, что делами backup-a должен
>заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос:
>как передать pg_dump-у пароль, введенный пользователем в диалоге.

можна поробовать через popen


"подмена /dev/tty"
Отправлено chip , 18-Авг-04 17:13 
>можна поробовать через popen

я извиняюсь, может быть я чего-то не допонимаю, но какая разница между pipe и popen, кроме того что последний открывает канал и fork()'aeт процесс, возвращая в дальнейшем указатель на FILE ? Запись в этот FILE* будет эквивалента записи в stdin порожденного процесса, но в формулировке же написано, что pg_dump берет его через open("/dev/tty")


"подмена /dev/tty"
Отправлено igvas , 18-Авг-04 19:22 
Совершенно верно, но popen не возвращает управление вызвавшему процессу до тех пор, пока не выполнится pg_dump, поэтому я не могу получить FILE* и, соответственно писать в него не могу.

"подмена /dev/tty"
Отправлено qq , 19-Авг-04 03:44 
>Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
>Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем
>потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через
>неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump
>просит пароль не через stdin, то организовать pipe и передать через
>него пароль никак не получается. Я понимаю, что делами backup-a должен
>заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос:
>как передать pg_dump-у пароль, введенный пользователем в диалоге.


по идее должно помочь man openpty (там же forkpty)