假设我有以下短程序,我将其称为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);
}
现在有两种情况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);
}
案例二:
#include <unistd.h>
#include <stdio.h>
#include <string.h>
int main(){
char* password = getpass("");
printf("%s\n", password);
}
在第一种情况下,如果我运行./Parent
,然后键入“Hello World”,我会得到两个“Hello World”的回声。一个来自子程序,一个来自父程序。
情况二,如果我运行./Parent
,然后键入“Hello World”,我会得到一个“Hello World”的回声,然后从子进程中得到一个输入提示。如果我在此提示符下键入“再见”,我将得到“再见”的回声。
如何修改Parent.c
以在案例 2 中获得与案例 1 中当前发生的相同行为?