首页 > 其他分享 >llvm输入输出流

llvm输入输出流

时间:2023-08-02 21:22:05浏览次数:35  
标签:std 文件 llvm 输入输出 raw fd ostream

llvm::raw_ostream

llvm::raw_ostream是一个抽象class,有两个重要的纯虚函数由子类实现,write_impl()保存将数据写入基础流的逻辑,current_pos()返回流中当前正在写入的位置。

llvm提供了以下输出流实现:

  • outs() for writing to stdout
  • errs() for writing to stderr
  • nulls() which discards the output (like writing to /dev/null)
  • raw_fd_ostream(StringRef, std::error_code) for writing to a file descriptor
  • raw_string_ostream(std::string) for writing to a std::string

前3个流直接返回其对象引用,如

llvm::raw_ostream &output = llvm:outs();

而fd/string流可使用抽象对象构造出来,如

//定义流对象
std::string str;
llvm::raw_string_ostream output_str(str);

std::string filename = "test_output.txt");
std::error_code ec;
llvm::raw_fd_ostream output_file(filename, ec, sys::fs::F_Text);
//定义函数,其中llvm::Value对象可直接使用流操作符输出来
void print_test(llvm::raw_ostream out) {
    llvm::Value tmp;
    out<<"test value "<< tmp;
}
//使用
print_test(output_str)
print_test(output_file)

另外,每个llvm::Value*都有一个自己的print函数,只需把llvm::raw_ostream对象传入即可。

llvm::Value tmp;
tmp->print(outs())

raw_fd_ostream构造附加内容

llvm::raw_fd_ostream在头文件llvm/Support/raw_ostream.h中声明。
共有以下6种构造方法:

//打开指定的文件(Filename)进行写入。如果发生错误,则将有关错误的信息输入EC,并应立即销毁这个stream。作为一种特殊情况,如果文件名是“-”,那么这个stream将使用STDOUT_FILENO而不是打开文件。这将不会关闭stdout描述符。
raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC);
//CreationDisposition是枚举类型,共有4种:
//(1) CD_CreateAlways(打开文件时,如果它已经存在,截断它;如果它还不存在,创建一个新文件)截断文件的意思是打开文件的时候先将文件的内容清空,再进行写入;并不是删除文件。
//(2) CD_CreateNew(打开文件时,如果它已经存在,fail;如果它还不存在,创建一个新文件)
//(3) CD_OpenExisting(打开文件时,如果它已经存在,则打开文件,并将偏移量设置为0;如果它还不存在,fail)
//(4) CD_OpenAlways (打开文件时,如果它已经存在,则打开文件,并将偏移量设置为0;如果它还不存在,创建一个新文件)
raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC, sys::fs::CreationDisposition Disp);
//FileAccess枚举类型:FA_Read和FA_Write。

raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC, sys::fs::FileAccess Access)

raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC, sys::fs::OpenFlags Flags)
/*Flags允许可选flags来控制文件将如何打开。枚举类型,共有9种:
OF_None、F_None、OF_Text(以文本模式打开)、
F_Text、OF_Append   (以追加模式打开)、
F_Append、OF_Delete (关闭时删除文件,只对windows有影响)、
OF_ChildInherit    (启动子进程时,此文件应在子进程中保持打开状态)、
OF_UpdateAtime     (强制文件在访问时更新,只对windows有影响)。
*/

raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC, sys::fs::CreationDisposition Disp, sys::fs::FileAccess Access, sys::fs::OpenFlags Flags)

raw_fd_ostream::raw_fd_ostream (int fd, bool shouldClose, bool unbuffered = false)
// FD是它要写入的文件描述符。如果ShouldClose为true,则在stream销毁时关闭文件。但是如果FD是stdout或stderr,它将不会关闭。

标签:std,文件,llvm,输入输出,raw,fd,ostream
From: https://www.cnblogs.com/UFO-blogs/p/17601773.html

相关文章

  • 05_llvm IR测试创建ifelse语句及多个block
    一个ifelse源码编译先看如下代码:intfunc(inta){intb;if(a>5)b=6;elseb=5;returnb;}编译命令../output/bin/clang++-emit-llvmllvm_if_else.c-S-oir.ll编译后的IR如下:;ModuleID='llvm_if_else.c'source_filename="llvm_if_else.c&q......
  • 04_llvm_IR测试生成运算指令
    四则运算指令介绍如下:#include<vector>#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h"#include"llvm/IR/Verifier.h"#include......
  • 03_llvm_IR测试创建变量
    主要分全局变量、函数参数、局部变量(常量)与返回值测试全局变量介绍说明、代码、编译与结果如下:#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h"#include"llvm/IR/Verifier.h&qu......
  • 02_llvm的IR测试创建函数和代码块
    如果要使用LLVM的能力,则需熟悉如何根据自己的代码生成出llvm的IR,以便提供给llvm使用。测试创建function测试代码如下02_test_function.cpp#include"llvm/IR/Module.h"#include"llvm/IR/LLVMContext.h"#include"llvm/Support/raw_ostream.h"#include"llvm/IR/Function.h&qu......
  • 【ACM专项练习#01】基本输入输出,如何加减
    关于ACM,牛客其实也有专门的模拟练习:https://ac.nowcoder.com/acm/contest/5657#question做这个也可以关于while(cin>>n)在处理输入时,cin>>n;while(n--)和while(cin>>n)是两种常见方法这里说一下区别cin>>n;while(n--)当你预先知道迭代次数,并希望根据该次数执......
  • 1.变量&&输入输出
    1.变量&&输入输出变量概念:变量,本质上是一个装东西的盒子,并且只能存放一个值。1.变量的命名规则变量的名字由:数字,字母,下划线组成,并且不能以数字开头,且区分大小写。变量的定义格式:变量名=值注意:赋值符号(从左往右读),==等于。a=1b=1.1c='hnfkujg'3.变量的类型int整型,f......
  • 1.变量&&输入输出
    1.变量&&输入输出一·变量概念:变量,本质上是一个装东西的盒子,并且只能存放一个值。1·变量的命名规则变量的名字由:数字,字母,下划线组成,并且不能以数字开头,且区分大小写。2.变量的定义格式:变量名=值注意:=赋值符号(从右往左读),==等于a=55b=6.555c='apple'3.变量的......
  • 01_llvm编译及创建一个module试用llvm
    LLVM源码编译准备好匹配的环境后,我的环境如下:$cat/proc/versionLinuxversion5.4.0-150-generic(buildd@bos03-amd64-012)(gccversion7.5.0(Ubuntu7.5.0-3ubuntu1~18.04))#167~18.04.1-Ubuntu如果环境较老,可checkout到比较老的分支再编,不然容易出现各种软件版本不......
  • nn.Conv2d()参数说明、输入输出
    1.参数说明2.输入输出参数计算若没有设置dilation:......
  • 关于伺服刹车/急停/前后设备信号对接/PLC输入输出模块的公共端介绍
    一、伺服刹车关键词:急停,急停中间继电器、刹车中间继电器,刹车使能正文:通常情况不用硬件为主导而用程序来主导控制,多场景应用方便修改且安全可靠。伺服刹车硬件,一般是24v电源给进去,就会释放刹车使能。拿一个Z轴伺服作为对象。1.程序上控制逻辑如下急停按钮一般都是NC触点串联......