我有一个第三方实用程序,我必须从我的应用程序中调用它来初始化他们的一些东西。我选择使用 using 来调用它,popen
因为我需要向标准输入写入密码。
我是一个简单的用例:
...
FILE *f = popen("utility-bin", "w");
fwrite(myPassword.c_str(), 1, myPassword.size(), f);
fflush(f);
pclose(f);
...
但是,无论我如何尝试,都不会发送流,并且该实用程序在等待密码时仍处于阻塞状态。
另一方面,如果我从常规 Linux shell 调用该实用程序,我只需输入密码,一切正常。
所以我的问题是:应用程序是否有可能阻止来自管道的数据,但仍接受来自普通用户 shell 的数据?而且,如果是这样的话,我能做些什么来让它接受我的管道输入吗?
PS:当我从外壳调用实用程序时,正在处理许多信号。ctrl+c
并且ctrl+z
,例如,什么都不做。