gem5 v24.0.0.0
|
Interface for creating files in a gem5 output directory. More...
#include <output.hh>
Public Member Functions | |
OutputDirectory () | |
Constructor. | |
OutputDirectory (const std::string &name) | |
Constructor. | |
~OutputDirectory () | |
Destructor. | |
std::string | resolve (const std::string &name) const |
Returns relative file names prepended with name of this directory. | |
void | setDirectory (const std::string &dir) |
Sets name of this directory. | |
const std::string & | directory () const |
Gets name of this directory. | |
OutputStream * | create (const std::string &name, bool binary=false, bool no_gz=false) |
Creates a file in this directory (optionally compressed). | |
OutputStream * | open (const std::string &name, std::ios_base::openmode mode, bool recreateable=true, bool no_gz=false) |
Open a file in this directory (optionally compressed). | |
void | close (OutputStream *file) |
Closes an output file and free the corresponding OutputFile. | |
OutputStream * | find (const std::string &name) const |
Finds stream associated with an open file or stdout/stderr. | |
OutputStream * | findOrCreate (const std::string &name, bool binary=false) |
bool | isFile (const std::string &name) const |
Determines whether a file name corresponds to a file in this directory. | |
OutputDirectory * | createSubdirectory (const std::string &name) |
Creates a subdirectory within this directory. | |
void | remove (const std::string &name, bool recursive=false) |
Removes a specified file or subdirectory. | |
Static Public Member Functions | |
static bool | isAbsolute (const std::string &name) |
Test if a path is absolute. | |
Static Protected Member Functions | |
static OutputStream * | checkForStdio (const std::string &name) |
Determines whether given file name corresponds to standard output streams. | |
Private Types | |
typedef std::map< std::string, OutputStream * > | file_map_t |
File names and associated stream handles. | |
typedef std::map< std::string, OutputDirectory * > | dir_map_t |
Output subdirectories. | |
Private Attributes | |
file_map_t | files |
Open file streams within this directory. | |
dir_map_t | dirs |
Output sub-directories. | |
std::string | dir |
Name of this directory. | |
Static Private Attributes | |
static const char | PATH_SEPARATOR = '/' |
System-specific path separator character. | |
static OutputStream | stdout |
static OutputStream | stderr |
|
private |
|
private |
gem5::OutputDirectory::OutputDirectory | ( | ) |
gem5::OutputDirectory::OutputDirectory | ( | const std::string & | name | ) |
gem5::OutputDirectory::~OutputDirectory | ( | ) |
|
staticprotected |
Determines whether given file name corresponds to standard output streams.
name | name of file to check |
Definition at line 135 of file output.cc.
void gem5::OutputDirectory::close | ( | OutputStream * | file | ) |
Closes an output file and free the corresponding OutputFile.
The output file must have been opened by the same OutputDirectory instance as the one closing it, or sim will fail.
file | OutputStream instance in this OutputDirectory. |
Definition at line 147 of file output.cc.
References fatal, files, gem5::ArmISA::i, gem5::OutputStream::name(), stderr, stdout, and gem5::OutputStream::stream().
Referenced by gem5::VncInput::captureFrameBuffer(), gem5::linux::PanicOrOopsEvent::process(), gem5::pseudo_inst::writefile(), gem5::ProtocolTester::~ProtocolTester(), gem5::SimPoint::~SimPoint(), and sc_gem5::TraceFile::~TraceFile().
OutputStream * gem5::OutputDirectory::create | ( | const std::string & | name, |
bool | binary = false, | ||
bool | no_gz = false ) |
Creates a file in this directory (optionally compressed).
Will open a file as a compressed stream if filename ends in .gz, unless explicitly disabled.
Relative output paths will result in the creation of a recreateable (see OutputFile) output file in the current output directory. Files created with an absolute path will not be recreateable.
name | name of file to create (without this directory's name leading it) |
binary | true to create a binary file; false otherwise |
no_gz | true to disable opening the file as a gzip compressed output stream; false otherwise |
Definition at line 210 of file output.cc.
References checkForStdio(), isAbsolute(), gem5::ArmISA::mode, name(), and open().
Referenced by gem5::VncInput::captureFrameBuffer(), gem5::Pl111::dmaDone(), gem5::ComputeUnit::exitCallback(), gem5::X86ISA::GpuTLB::exitCallback(), findOrCreate(), gem5::output(), gem5::linux::PanicOrOopsEvent::process(), gem5::ProtocolTester::ProtocolTester(), gem5::HDLcd::pxlFrameDone(), gem5::SimPoint::SimPoint(), gem5::ArmISA::FsLinux::startup(), and gem5::pseudo_inst::writefile().
OutputDirectory * gem5::OutputDirectory::createSubdirectory | ( | const std::string & | name | ) |
Creates a subdirectory within this directory.
name | name of subdirectory |
Definition at line 283 of file output.cc.
References dir, directory(), dirs, fatal, name(), OutputDirectory(), and resolve().
Referenced by gem5::VncInput::VncInput().
const std::string & gem5::OutputDirectory::directory | ( | ) | const |
OutputStream * gem5::OutputDirectory::find | ( | const std::string & | name | ) | const |
Finds stream associated with an open file or stdout/stderr.
name | of file |
Definition at line 247 of file output.cc.
References checkForStdio(), files, gem5::ArmISA::i, and name().
Referenced by findOrCreate(), isFile(), and gem5::output().
OutputStream * gem5::OutputDirectory::findOrCreate | ( | const std::string & | name, |
bool | binary = false ) |
Definition at line 262 of file output.cc.
References create(), find(), name(), and gem5::X86ISA::os.
Referenced by gem5::statistics::initText(), and gem5::Terminal::terminalDump().
|
inlinestatic |
Test if a path is absolute.
Definition at line 277 of file output.hh.
References name(), and PATH_SEPARATOR.
Referenced by create(), resolve(), and gem5::VirtIO9PDiod::startDiod().
bool gem5::OutputDirectory::isFile | ( | const std::string & | name | ) | const |
Determines whether a file name corresponds to a file in this directory.
name | name of file to evaluate |
Definition at line 272 of file output.cc.
References find(), name(), and gem5::ArmISA::st.
Referenced by remove().
OutputStream * gem5::OutputDirectory::open | ( | const std::string & | name, |
std::ios_base::openmode | mode, | ||
bool | recreateable = true, | ||
bool | no_gz = false ) |
Open a file in this directory (optionally compressed).
Will open a file as a compressed stream if filename ends in .gz, unless explicitly disabled.
filename | file to open |
mode | attributes to open file with |
recreateable | Set to true if the file can be recreated in a new location. |
no_gz | true to disable opening the file as a gzip compressed output stream; false otherwise |
Definition at line 224 of file output.cc.
References files, gem5::ArmISA::mode, name(), and gem5::X86ISA::os.
Referenced by create(), and gem5::pseudo_inst::writefile().
void gem5::OutputDirectory::remove | ( | const std::string & | name, |
bool | recursive = false ) |
Removes a specified file or subdirectory.
Will cause sim to fail for most errors. However, it will only warn the user if a directory could not be removed. This is in place to accommodate slow file systems where file deletions within a subdirectory may not be recognized quickly enough thereby causing the subsequent call to remove the directory to fail (seemingly unempty directory).
name | name of file or subdirectory to remove; name should not be prepended with the name of this directory object |
recursive | set to true to attempt to recursively delete a subdirectory and its contents |
Definition at line 296 of file output.cc.
References gem5::X86ISA::de, directory(), fatal, files, gem5::ArmISA::i, isFile(), name(), PATH_SEPARATOR, remove(), and resolve().
Referenced by remove(), and gem5::VncInput::VncInput().
std::string gem5::OutputDirectory::resolve | ( | const std::string & | name | ) | const |
Returns relative file names prepended with name of this directory.
Returns absolute file names unaltered.
name | file name to prepend with directory name |
Definition at line 204 of file output.cc.
References dir, isAbsolute(), and name().
Referenced by gem5::BaseSemihosting::callTmpNam(), createSubdirectory(), gem5::trace::InstPBTrace::createTraceFile(), gem5::statistics::initHDF5(), gem5::ListenSocketUnixFile::listen(), gem5::MemTraceProbe::MemTraceProbe(), gem5::FDArray::openOutputFile(), gem5::OutputFile< StreamType >::OutputFile(), gem5::OutputFile< StreamType >::relocate(), remove(), and gem5::VirtIO9PDiod::startDiod().
void gem5::OutputDirectory::setDirectory | ( | const std::string & | dir | ) |
Sets name of this directory.
dir | name of this directory |
Definition at line 164 of file output.cc.
References gem5::ArmISA::d, dir, dirs, fatal, files, gem5::ArmISA::i, and PATH_SEPARATOR.
Referenced by OutputDirectory(), and gem5::setOutputDir().
|
private |
Name of this directory.
Definition at line 153 of file output.hh.
Referenced by createSubdirectory(), directory(), resolve(), and setDirectory().
|
private |
Output sub-directories.
Definition at line 150 of file output.hh.
Referenced by createSubdirectory(), and setDirectory().
|
private |
Open file streams within this directory.
Definition at line 147 of file output.hh.
Referenced by close(), find(), open(), remove(), setDirectory(), and ~OutputDirectory().
|
staticprivate |
System-specific path separator character.
Definition at line 156 of file output.hh.
Referenced by isAbsolute(), remove(), and setDirectory().
|
staticprivate |
Definition at line 159 of file output.hh.
Referenced by checkForStdio(), and close().
|
staticprivate |
Definition at line 158 of file output.hh.
Referenced by checkForStdio(), and close().