gpt4 book ai didi

c - 在等待 Stdin 时不调用 select 调用之前的 Printf

转载 作者:太空宇宙 更新时间:2023-11-04 02:29:45 24 4
gpt4 key购买 nike

这是我的代码:

int main()
{
struct timeval tv;
fd_set fds;
char cmd[256]={};
int second = 0, ret;

printf("Enter Command : ");
while (1) {
tv.tv_sec=1;
tv.tv_usec=0;

FD_ZERO(&fds);

FD_SET(STDIN_FILENO, &fds);

if ((ret = select(STDIN_FILENO+1, &fds, NULL, NULL, &tv)) < 0 ) {
printf("Select Failed: Exiting\n");
break;
}

if (FD_ISSET(STDIN_FILENO, &fds))
{
if (fgets(cmd, 256, stdin) != NULL) {
printf("Running Command - %s\n", cmd);
input_invoke_func(cmd);
printf("Enter Command : ");
}
} else {
second++;
//print_time(second);
}
}
return 0;
}

我发现在我在 STDIN 中提供任何输入之前,不会打印“Enter Command:”字符串。请让我知道这种行为的原因!!

谢谢。

最佳答案

输入和输出在标准库中缓冲。这意味着“打印”或写入文件的数据不会立即发送到操作系统(因此发送到屏幕或文件)。这样做是因为实际发送数据有一些开销,并且以更大的批处理执行此操作更有效。要强制发送数据,可以调用 fflush:

printf("Enter Command : ");
fflush(stdout);

注意:当标准输出连接到终端时,刷新会自动发生在换行符上。

关于c - 在等待 Stdin 时不调用 select 调用之前的 Printf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com