llvm::raw_fd_ostream类详解

llvm::raw_fd_ostream在头文件llvm/Support/raw_ostream.h中声明。

共有以下6种构造方法:

  • raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC)
    打开指定的文件(Filename)进行写入。如果发生错误,则将有关错误的信息输入EC,并应立即销毁这个stream。作为一种特殊情况,如果文件名是“-”,那么这个stream将使用STDOUT_FILENO而不是打开文件。这将不会关闭stdout描述符。

  • raw_fd_ostream::raw_fd_ostream (StringRef Filename, std::error_code & EC, sys::fs::CreationDisposition Disp)
    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::FileAccess Access)
    FileAccess枚举类型:FA_Read和FA_Write。

  • 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,它将不会关闭。