【发布时间】:2013-10-03 14:18:49
【问题描述】:
我有一个第三方实用程序,我必须从我的应用程序中调用它来初始化他们的一些东西。我选择使用popen 调用它,因为我需要向标准输入写入密码。
我是一个简单的用例:
...
FILE *f = popen("utility-bin", "w");
fwrite(myPassword.c_str(), 1, myPassword.size(), f);
fflush(f);
pclose(f);
...
但是,无论我如何尝试,都不会发送流,并且该实用程序在等待密码时仍处于阻塞状态。
另一方面,如果我从常规 Linux shell 调用该实用程序,我只需输入密码,一切正常。
所以我的问题是:应用程序是否有可能阻止来自管道的数据,但仍接受来自普通用户 shell 的数据?而且,如果是这种情况,我能做些什么让它接受我的管道输入吗?
PS:当我从 shell 调用实用程序时,正在处理许多信号。 ctrl+c 和 ctrl+z,例如,什么都不做。
【问题讨论】:
-
你能在进程上做一个
strace(从终端正常运行它)并发布它如何尝试读取登录名,以及从哪里读取? -
除其他外,sftp 这样做