c语言终止 fget stdin 输入流

在阅读Redis源码,有一段是从配置文件、输入流和选项参数中读取配置内容,在调试输入流这一步,虽然能输入,但是我却不知道怎么停止输入流。尝试过使用ctrl + c ,但会使整个程序都终止。

void loadServerConfig(char *filename, char config_from_stdin, char *options) {
    //新建空sds对象 config ,最后这个config还会被手动释放的
    sds config = sdsempty();
    char buf[CONFIG_MAX_LINE+1];
    FILE *fp;

    /* Load the file content */
    if (filename) {
        if ((fp = fopen(filename,"r")) == NULL) {
            serverLog(LL_WARNING,
                    "Fatal error, can't open config file '%s': %s",
                    filename, strerror(errno));
            exit(1);
        }
        while(fgets(buf,CONFIG_MAX_LINE+1,fp) != NULL)
            config = sdscat(config,buf);
        fclose(fp);
    }
    /* Append content from stdin */
    if (config_from_stdin) {
        serverLog(LL_WARNING,"Reading config from stdin");
        fp = stdin;
        while(fgets(buf,CONFIG_MAX_LINE+1,fp) != NULL){
            config = sdscat(config,buf);
            printf("========>loadServerConfig=>stdin:%s\n", config);
        }
    }

    /* Append the additional options */
    if (options) {
        config = sdscat(config,"\n");
        config = sdscat(config,options);
    }
    //从配置文本中中解析配置
    loadServerConfigFromString(config);
    sdsfree(config);
}

有可能是查找的关键字不对,在搜索引擎上也没找正确的答案,后来通过使用how to stop fget s stdin关键词在bing国际版搜到一篇文章,有一个评论是这么回答的,I have to hit Ctrl-D or fill up the buffer to make it stop reading.意思就是使用ctrl + D快捷键或者将缓冲区填满。然后我尝试使用ctrl + d ,确实终止了输入流并正常进入下一步的配位解析的步骤。

问题解决。

参考文档:https://www.daniweb.com/programming/software-development/threads/510458/c-programming-stop-reading-from-stdin

后来翻书 << c primer plus >>的第507页其实是有讲终止键盘输入的

每次按下Enter键,系统便会处理缓冲区中储存的字符,并在下一行打 印该输入行的副本。这个过程一直持续到以UNIX风格模拟文件结尾(按下Ctrl+D)。在PC中,要按下Ctrl+Z。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值