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种:- CD_CreateAlways(打开文件时,如果它已经存在,截断它;如果它还不存在,创建一个新文件)
截断文件的意思是打开文件的时候先将文件的内容清空,再进行写入;并不是删除文件。 - CD_CreateNew(打开文件时,如果它已经存在,fail;如果它还不存在,创建一个新文件)
- CD_OpenExisting(打开文件时,如果它已经存在,则打开文件,并将偏移量设置为0;如果它还不存在,fail)
- CD_OpenAlways
(打开文件时,如果它已经存在,则打开文件,并将偏移量设置为0;如果它还不存在,创建一个新文件)
- CD_CreateAlways(打开文件时,如果它已经存在,截断它;如果它还不存在,创建一个新文件)
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,它将不会关闭。