アプリケーションから呼び出して、それらのものの一部を初期化する必要があるサードパーティのユーティリティがあります。popen
標準入力にパスワードを書き込む必要があるため、使用して呼び出すことにしました。
私は単純なユースケースです:
...
FILE *f = popen("utility-bin", "w");
fwrite(myPassword.c_str(), 1, myPassword.size(), f);
fflush(f);
pclose(f);
...
ただし、どのように試しても、ストリームは送信されず、ユーティリティはパスワードを待っている間ブロックされたままです。
一方、通常の Linux シェルからユーティリティを呼び出すと、パスワードを入力するだけですべてが機能します。
私の質問は次のとおりです。アプリケーションがパイプからのデータをブロックしながら、通常のユーザー シェルからのデータを受け入れることは可能ですか? その場合、パイプ入力を受け入れるようにするためにできることはありますか?
PS: シェルからユーティリティを呼び出すと、多くのシグナルが処理されます。ctrl+c
そしてctrl+z
、たとえば、何もしません。