我正在使用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
?
谢谢,
答案 0 :(得分:0)
您始终可以使用close
关闭stdin
文件描述符,即close(0)
。如果您查看llvm::MemoryBuffer
的来源,您会发现getFileOrSTDIN()
基本上归结为对llvm::MemoryBuffer::getMemoryBufferForStream()
的调用,第一个参数(文件描述符)设置为0.
另请参阅this SO回答。
关闭标准输入的特殊字符是ctrl-d
(至少在* nix中)命令行(看看here)。