如何在读取STDIN时获取llvm :: MemoryBuffer的内容?

时间:2018-01-08 15:10:27

标签: c++ llvm llvm-clang

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

现在,在以下背景下:

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永远不会关闭。

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

谢谢,

1 个答案:

答案 0 :(得分:0)

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

另请参阅this SO回答。

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