次の短いプログラムがあるとします。これを と呼びますParent.c
。
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(){
char buffer[100];
memset(buffer, '\0', 100);
scanf("%s", buffer);
printf("%s\n", buffer);
FILE* child = popen("./child","w");
fwrite(buffer, 1, strlen(buffer), child);
pclose(child);
}
には 2 つのケースがありchild.c
ます。
ケース 1:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(){
char buffer[100];
memset(buffer, '\0', 100);
scanf("%s", buffer);
printf("%s\n", buffer);
}
ケース 2:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(){
char* password = getpass("");
printf("%s\n", password);
}
ケース 1 では、 を実行./Parent
してから「Hello World」と入力すると、「Hello World」のエコーが 2 回表示されます。1 つは子プログラムからのもので、もう 1 つは親プログラムからのものです。
ケース 2 で、 を実行./Parent
してから「Hello World」と入力すると、「Hello World」のエコーが 1 つ表示され、子プロセスから入力プロンプトが表示されます。このプロンプトで「Goodbye」と入力すると、「Goodbye」のエコーが返されます。
Parent.c
ケース 1 で現在発生しているのと同じ動作をケース 2 で取得するには、どうすれば変更できますか?