Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump просит пароль не через stdin, то организовать pipe и передать через него пароль никак не получается. Я понимаю, что делами backup-a должен заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос: как передать pg_dump-у пароль, введенный пользователем в диалоге.
>Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
>Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем
>потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через
>неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump
>просит пароль не через stdin, то организовать pipe и передать через
>него пароль никак не получается. Я понимаю, что делами backup-a должен
>заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос:
>как передать pg_dump-у пароль, введенный пользователем в диалоге.можна поробовать через popen
>можна поробовать через popenя извиняюсь, может быть я чего-то не допонимаю, но какая разница между pipe и popen, кроме того что последний открывает канал и fork()'aeт процесс, возвращая в дальнейшем указатель на FILE ? Запись в этот FILE* будет эквивалента записи в stdin порожденного процесса, но в формулировке же написано, что pg_dump берет его через open("/dev/tty")
Совершенно верно, но popen не возвращает управление вызвавшему процессу до тех пор, пока не выполнится pg_dump, поэтому я не могу получить FILE* и, соответственно писать в него не могу.
>Я пишу софтину на QT. Софтина-клиент базы данных PostgreSQL v7.2.
>Есть задача дать пользователю возможность делать backup базы. Я пытаюсть в дочернем
>потоке exec-нуть утилиту pg_dump, но та, открывает /dev/tty и просит через
>неё пароль. НО! пароль вводится пользователем в диалоге. Так как pg_dump
>просит пароль не через stdin, то организовать pipe и передать через
>него пароль никак не получается. Я понимаю, что делами backup-a должен
>заниматься админ, но мне ПОЗАРЕЗ НАДО buckup-ить базу из диалога. Вопрос:
>как передать pg_dump-у пароль, введенный пользователем в диалоге.
по идее должно помочь man openpty (там же forkpty)