在等待通过 scanf() 输入之前,没有通过 SSH 的输出
No output over SSH before waiting for input via scanf()
我在远程 Unix 系统上有一个名为 get_int.c
的文件,其中包含以下内容:
#include <stdio.h>
int main() {
int input;
printf("Give an integer: ");
fflush(stdout);
scanf("%d", &input);
printf("Try again: ");
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}
我有一个编译命令,运行 来自本地 WSL 的这个文件:
sshpass -f pass.txt ssh username@remote.host.address "cd path/to/file/ && gcc get_int.c && a.out"
当我执行这条命令时,成功得到提示Give an integer:
并提供一个并回车。然后,但是,我没有得到提示 Try again:
。我仍然可以输入一个整数 (123) 并按回车键。当我这样做时,它会打印 Try again: You said... 123
如您所见,在我 fflush(stdout)
或程序结束之前不会进行打印。我可以修改我的 ssh 命令,以便输出到本地终端而不必在每个 scanf
之前 fflush
吗?
在所描述的特定情况下,在您的系统上从 stdin
读取时,stdout
的输出似乎不会被刷新。在每次调用 scanf()
:
之前,您必须用 fflush()
显式刷新 stdout
#include <stdio.h>
int main() {
int input;
printf("Give an integer: ");
fflush(stdout);
scanf("%d", &input);
printf("Try again: ");
fflush(stdout);
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}
或者,您可以将输出流设置为无缓冲,根本不需要刷新它:
#include <stdio.h>
int main() {
int input;
setvbuf(stdout, NULL, _IONBF, 0);
printf("Give an integer: ");
scanf("%d", &input);
printf("Try again: ");
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}
我在远程 Unix 系统上有一个名为 get_int.c
的文件,其中包含以下内容:
#include <stdio.h>
int main() {
int input;
printf("Give an integer: ");
fflush(stdout);
scanf("%d", &input);
printf("Try again: ");
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}
我有一个编译命令,运行 来自本地 WSL 的这个文件:
sshpass -f pass.txt ssh username@remote.host.address "cd path/to/file/ && gcc get_int.c && a.out"
当我执行这条命令时,成功得到提示Give an integer:
并提供一个并回车。然后,但是,我没有得到提示 Try again:
。我仍然可以输入一个整数 (123) 并按回车键。当我这样做时,它会打印 Try again: You said... 123
如您所见,在我 fflush(stdout)
或程序结束之前不会进行打印。我可以修改我的 ssh 命令,以便输出到本地终端而不必在每个 scanf
之前 fflush
吗?
在所描述的特定情况下,在您的系统上从 stdin
读取时,stdout
的输出似乎不会被刷新。在每次调用 scanf()
:
fflush()
显式刷新 stdout
#include <stdio.h>
int main() {
int input;
printf("Give an integer: ");
fflush(stdout);
scanf("%d", &input);
printf("Try again: ");
fflush(stdout);
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}
或者,您可以将输出流设置为无缓冲,根本不需要刷新它:
#include <stdio.h>
int main() {
int input;
setvbuf(stdout, NULL, _IONBF, 0);
printf("Give an integer: ");
scanf("%d", &input);
printf("Try again: ");
scanf("%d", &input);
printf("You said... %d\n", input);
return 0;
}