【问题标题】:How do I get the content of llvm::MemoryBuffer when reading STDIN?读取 STDIN 时如何获取 llvm::MemoryBuffer 的内容?
【发布时间】:2018-01-08 15:10:27
【问题描述】:

我正在使用llvm::MemoryBuffer::getFileOrSTDIN("-"),根据specification,它应该将指定的文件作为MemoryBuffer打开,如果文件名是“-”则打开stdin em>。

现在,在以下上下文中:

auto Source = llvm::MemoryBuffer::getFileOrSTDIN(File);

if (std::error_code err = Source.getError()) {
    llvm::errs() << err.message();
} else{
    someFunction(std::move(*Source), File, makeOutputWriter(Format, llvm::outs()),
            IdentifiersOnly, DumpAST);
}

它在第一行阻塞(当File == "-"时);正如预期的那样,STDIN 永远不会关闭。

当一个特殊的*char 出现在 STDIN 中时,比如说&lt;END_CHAR&gt;,我知道我已经完成了给定任务的阅读。在这种情况下,我如何关闭 STDIN 并转到 someFunction

谢谢,

【问题讨论】:

    标签: c++ llvm llvm-clang


    【解决方案1】:

    您始终可以使用close 关闭stdin 文件描述符,即close(0)。如果您查看llvm::MemoryBuffer 的源代码,您会发现getFileOrSTDIN() 基本上归结为对llvm::MemoryBuffer::getMemoryBufferForStream() 的调用,其中第一个参数(文件描述符)设置为0。

    另外,请参阅this SO 答案。

    关闭标准输入的特殊字符是命令行上的ctrl-d(至少在*nix中)(看看here)。

    【讨论】:

      猜你喜欢
      • 2013-02-26
      • 1970-01-01
      • 2012-08-07
      • 2022-11-21
      • 1970-01-01
      • 2020-08-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-08
      相关资源
      最近更新 更多