system_utils Module

Platform-agnostic system utilities module Provides cross-platform wrappers for common system operations


Uses


Functions

public function sys_file_exists(filepath) result(exists)

Check if a file exists (handles both regular files and symlinks)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filepath

Return Value logical

public function sys_dir_exists(dirpath) result(exists)

Check if a directory exists

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: dirpath

Return Value logical

public function sys_get_path_separator() result(sep)

Get platform-specific path separator

Arguments

None

Return Value character(len=1)

public function sys_count_files(directory) result(count)

Count files in a directory

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: directory

Return Value integer

public function sys_process_exists(pid) result(exists)

Check if a process exists

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: pid

Return Value logical

public function sys_get_temp_dir() result(temp_dir)

Get system temporary directory

Arguments

None

Return Value character(len=:), allocatable

public function get_stderr_redirect() result(redirect)

Get platform-specific stderr redirection string

Arguments

None

Return Value character(len=:), allocatable

public function escape_shell_arg(arg) result(escaped)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: arg

Return Value character(len=:), allocatable


Subroutines

public subroutine sys_copy_file(source, dest, success, error_msg)

Copy a file from source to destination

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: source
character(len=*), intent(in) :: dest
logical, intent(out) :: success
character(len=*), intent(out), optional :: error_msg

public subroutine sys_copy_dir(source, dest, success, error_msg)

Copy a directory recursively from source to destination

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: source
character(len=*), intent(in) :: dest
logical, intent(out) :: success
character(len=*), intent(out), optional :: error_msg

public subroutine sys_remove_file(filepath, success)

Remove a file

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filepath
logical, intent(out), optional :: success

public subroutine sys_remove_dir(dirpath, success)

Remove a directory and all its contents

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: dirpath
logical, intent(out), optional :: success

public subroutine sys_move_file(source, dest, success)

Move/rename a file

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: source
character(len=*), intent(in) :: dest
logical, intent(out) :: success

public subroutine sys_list_files(directory, pattern, files, num_files)

List files in a directory matching a pattern

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: directory
character(len=*), intent(in) :: pattern
character(len=*), intent(out) :: files(:)
integer, intent(out) :: num_files

public subroutine sys_get_absolute_path(filepath, abs_path, success)

Get absolute path of a file

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: filepath
character(len=*), intent(out) :: abs_path
logical, intent(out), optional :: success

public subroutine sys_get_current_dir(cwd, success)

Get current working directory

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(out) :: cwd
logical, intent(out), optional :: success

public subroutine sys_find_files(directory, pattern, files, num_files, recursive, max_depth)

Find files matching a pattern (recursive or non-recursive)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: directory
character(len=*), intent(in) :: pattern
character(len=*), intent(out) :: files(:)
integer, intent(out) :: num_files
logical, intent(in), optional :: recursive
integer, intent(in), optional :: max_depth

public subroutine sys_create_dir(dirpath, success, create_parents)

Create a directory (with parent directories if needed)

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: dirpath
logical, intent(out), optional :: success
logical, intent(in), optional :: create_parents

public subroutine sys_create_symlink(target, link_name, success)

Create a symbolic link

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: target
character(len=*), intent(in) :: link_name
logical, intent(out) :: success

public subroutine sys_run_command(command, output, exit_code, timeout)

Run a command and capture output

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: command
character(len=*), intent(out) :: output
integer, intent(out) :: exit_code
integer, intent(in), optional :: timeout

public subroutine sys_sleep(seconds)

Sleep for specified seconds

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: seconds

public subroutine sys_kill_process(pid, success, force)

Kill a process by PID

Arguments

Type IntentOptional Attributes Name
integer, intent(in) :: pid
logical, intent(out) :: success
logical, intent(in), optional :: force

public subroutine sys_run_command_with_exit_code(command, output_file, exit_file)

Run a command and capture output and exit code to files This is a portable way to replace Unix "command > output 2>&1; echo $? > exit_file"

Arguments

Type IntentOptional Attributes Name
character(len=*), intent(in) :: command
character(len=*), intent(in) :: output_file
character(len=*), intent(in) :: exit_file