Package ghidra.pcode.emu.unix

# Interface EmuUnixFileSystem<T>

Type Parameters:
  `T` - the type of values stored in the files

All Known Implementing Classes:
  `AbstractEmuUnixFileSystem`, `BytesEmuUnixFileSystem`, `TaintEmuUnixFileSystem`

public interface EmuUnixFileSystem<T>
A simulated UNIX file system

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Interface
  Description
  `static enum`
  `EmuUnixFileSystem.OpenFlag`
  Open flags as defined by the simulator

- ## Method Summary

  Modifier and Type
  Method
  Description
  `EmuUnixFile<T>`
  `createOrGetFile(String pathname, int mode)`
  Get the named file, creating it if it doesn't already exist
  `EmuUnixFile<T>`
  `getFile(String pathname)`
  Get the named file
  `EmuUnixFile<T>`
  `newFile(String pathname, int mode)`
  A factory for constructing a new file (without adding it to the file system)
  `EmuUnixFile<T>`
  `open(String pathname, Set<EmuUnixFileSystem.OpenFlag> flags, EmuUnixUser user, int mode)`
  Open the requested file according to the given flags and user
  `void`
  `putFile(String pathname, EmuUnixFile<T> file)`
  Place the given file at the given location
  `void`
  `unlink(String pathname, EmuUnixUser user)`
  Remove the file at the given location

- ## Method Details

  - ### newFile

    EmuUnixFile<T> newFile(String pathname, int mode) throws EmuIOException
    A factory for constructing a new file (without adding it to the file system)
    Parameters:
      `pathname` - the path of the file
      `mode` - the mode of the new file
    Returns:
      the new file
    Throws:
      `EmuIOException` - if the file cannot be constructed

  - ### createOrGetFile

    EmuUnixFile<T> createOrGetFile(String pathname, int mode) throws EmuIOException
    Get the named file, creating it if it doesn't already exist

    This is accessed by the emulator user, not the target program.

    Parameters:
      `pathname` - the pathname of the requested file
      `mode` - the mode of a created file. Ignored if the file exists
    Returns:
      the file
    Throws:
      `EmuIOException` - if an error occurred

  - ### getFile

    EmuUnixFile<T> getFile(String pathname) throws EmuIOException
    Get the named file

    This is accessed by the emulator user, not the target program.

    Parameters:
      `pathname` - the pathname of the requested file
    Returns:
      the file, or `null` if it doesn't exist
    Throws:
      `EmuIOException` - if an error occurred

  - ### putFile

    void putFile(String pathname, EmuUnixFile<T> file) throws EmuIOException
    Place the given file at the given location

    This is accessed by the emulator user, not the target program. If the file already exists, it is replaced silently.

    Parameters:
      `pathname` - the pathname of the file
      `file` - the file, presumably having the same pathname
    Throws:
      `EmuIOException` - if an error occurred

  - ### unlink

    void unlink(String pathname, EmuUnixUser user) throws EmuIOException
    Remove the file at the given location

    TODO: Separate the user-facing routine from the target-facing routine.

    If the file does not exist, this has no effect.

    Parameters:
      `pathname` - the pathname of the file to unlink
      `user` - the user requesting the unlink
    Throws:
      `EmuIOException` - if an error occurred

  - ### open

    EmuUnixFile<T> open(String pathname, Set<EmuUnixFileSystem.OpenFlag> flags, EmuUnixUser user, int mode) throws EmuIOException
    Open the requested file according to the given flags and user

    This is generally accessed by the target program via a `DefaultEmuUnixFileHandle`.

    Parameters:
      `pathname` - the pathname of the requested file
      `flags` - the requested open flags
      `user` - the user making the request
      `mode` - the mode to assign the file, if created. Otherwise ignored
    Returns:
      the file
    Throws:
      `EmuIOException` - if an error occurred, e.g., file not found, or access denied