我搜索了这个问题,只能找到python变体。如果这是重复的歉意。
我正在尝试用c编写一个自动设置系统的脚本,这样我就不必在计算机堆上进行手动操作了。对于脚本的一部分,我需要输入密码。
答案 0 :(得分:0)
如果您可以访问终端,为什么不对这些设置使用bash?在C或bash的两种情况下,如果您要访问高特权级别的区域,则都需要特权访问权限。您想要的东西是sudo命令。它将在运行密码之前提示您输入密码,并且运行如下:
sudo someExecutable
答案 1 :(得分:0)
某些程序(提示输入密码)使用isatty(STDIN_FILENO)
调用来确保通过终端输入密码。
在这种情况下,无法使用普通管道将密码发送给程序。
对于那些程序,您可以创建一个伪终端,代替管道使用。示例:
void test(void)
{
const int fdm = posix_openpt(O_RDWR | O_NOCTTY);
if (fdm != -1)
{
char name[100];
unlockpt(fdm);
ptsname_r(fdm, name, sizeof(name));
const int fds = open(name, O_RDWR | O_NOCTTY);
if (fds != -1)
{
const pid_t child_pid = fork();
if (child_pid == -1)
{
// TODO: Error handling
}
else if (child_pid == 0)
{
dup2(fds, STDIN_FILENO);
dup2(fds, STDOUT_FILENO);
close(fds);
close(fdm);
execl("/sbin/program_that_requires_password_from_terminal", "blabla", (char*) NULL);
}
else
{
const char password[] = "mypassword\n";
int status;
close(fds);
// TODO: wait prompt from the program by reading fdm
write(fdm, password, strlen(password));
waitpid(-1, &status, 0);
close(fdm);
}
}
}
}
通过这种方式,目标程序中的isatty(STDIN_FILENO)
返回'true'。