gpt4 book ai didi

c stdout 到 stdin 实时

转载 作者:IT王子 更新时间:2023-10-29 01:18:37 26 4
gpt4 key购买 nike

我制作了两个程序,其中一个名为生成器,每秒打印一些文本

int main(int argc, char** argv) {

for(int i = 0; i < 10 ; i++) {
printf("something\n");
sleep(1);
}

return (EXIT_SUCCESS);
}

然后有第二个程序现在称为消费者,它应该从标准输入中读取并添加一些其他文本并重新打印它。让它看起来像这样:

 int main(int argc, char** argv) {


char line[BUFSIZ];

while(scanf("%s",line) != -1){
printf("you entered %s \n",line);
}

return (EXIT_SUCCESS);
}

当我编译它们并尝试只运行像 ./generator 这样的生成器时,它按我预期的方式工作。每秒都会打印一些东西到控制台。但是当我尝试像 ./generator | 一样运行它们时。/消费者它没有像我预期的那样工作。我等了 10 秒,然后得到 10 行 you entered something我想每秒打印“你输入了一些东西”。

你能解释一下为什么会这样吗,或者最好告诉我如何实现预期的行为?。

最佳答案

C I/O 被缓冲。使用终端 I/O 时,缓冲规则是行缓冲,因此在发送 \n 时将内容刷新到输出。当您使用管道时,缓冲规则是完全缓冲,因此只有当缓冲区已满(无论内容是什么)时才会刷新内容。

您可以:

  1. flush(stdout) 每次需要数据真正写出来的时候,
  2. 通过在任何写入之前调用 setvbuf 来更改缓冲区规则。

关于c stdout 到 stdin 实时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40429126/

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