User's Guide
Reference Manual
Release Notes
PDF
Top

STDLIB
Reference Manual
Version 1.17.3

Expand All
Contract All

Table of Contents

- STDLIB (App)
- array
  - Top of manual page
  - default/1
  - fix/1
  - foldl/3
  - foldr/3
  - from_list/1
  - from_list/2
  - from_orddict/1
  - from_orddict/2
  - get/2
  - is_array/1
  - is_fix/1
  - map/2
  - new/0
  - new/1
  - new/2
  - relax/1
  - reset/2
  - resize/1
  - resize/2
  - set/3
  - size/1
  - sparse_foldl/3
  - sparse_foldr/3
  - sparse_map/2
  - sparse_size/1
  - sparse_to_list/1
  - sparse_to_orddict/1
  - to_list/1
  - to_orddict/1
- base64
  - Top of manual page
  - encode/1
  - encode_to_string/1
  - decode/1
  - decode_to_string/1
  - mime_decode/1
  - mime_decode_to_string/1
- beam_lib
  - Top of manual page
  - chunks/2
  - chunks/3
  - version/1
  - md5/1
  - info/1
  - cmp/2
  - cmp_dirs/2
  - diff_dirs/2
  - strip/1
  - strip_files/1
  - strip_release/1
  - format_error/1
  - crypto_key_fun/1
  - clear_crypto_key_fun/0
- binary
  - Top of manual page
  - at/2
  - bin_to_list/1
  - bin_to_list/2
  - bin_to_list/3
  - compile_pattern/1
  - copy/1
  - copy/2
  - decode_unsigned/1
  - decode_unsigned/2
  - encode_unsigned/1
  - encode_unsigned/2
  - first/1
  - last/1
  - list_to_bin/1
  - longest_common_prefix/1
  - longest_common_suffix/1
  - match/2
  - match/3
  - matches/2
  - matches/3
  - part/2
  - part/3
  - referenced_byte_size/1
  - replace/3
  - replace/4
  - split/2
  - split/3
- c
  - Top of manual page
  - bt/1
  - c/1
  - c/2
  - cd/1
  - flush/0
  - help/0
  - i/0
  - ni/0
  - i/3
  - l/1
  - lc/1
  - ls/0
  - ls/1
  - m/0
  - m/1
  - memory/0
  - memory/1
  - memory/1
  - nc/1
  - nc/2
  - nl/1
  - pid/3
  - pwd/0
  - q/0
  - regs/0
  - nregs/0
  - xm/1
  - y/1
  - y/2
- calendar
  - Top of manual page
  - date_to_gregorian_days/1
  - date_to_gregorian_days/3
  - datetime_to_gregorian_seconds/1
  - day_of_the_week/1
  - day_of_the_week/3
  - gregorian_days_to_date/1
  - gregorian_seconds_to_datetime/1
  - is_leap_year/1
  - iso_week_number/0
  - iso_week_number/1
  - last_day_of_the_month/2
  - local_time/0
  - local_time_to_universal_time/1
  - local_time_to_universal_time_dst/1
  - now_to_local_time/1
  - now_to_universal_time/1
  - now_to_datetime/1
  - seconds_to_daystime/1
  - seconds_to_time/1
  - time_difference/2
  - time_to_seconds/1
  - universal_time/0
  - universal_time_to_local_time/1
  - valid_date/1
  - valid_date/3
- dets
  - Top of manual page
  - all/0
  - bchunk/2
  - close/1
  - delete/2
  - delete_all_objects/1
  - delete_object/2
  - first/1
  - foldl/3
  - foldr/3
  - from_ets/2
  - info/1
  - info/2
  - init_table/2
  - insert/2
  - insert_new/2
  - is_compatible_bchunk_format/2
  - is_dets_file/1
  - lookup/2
  - match/1
  - match/2
  - match/3
  - match_delete/2
  - match_object/1
  - match_object/2
  - match_object/3
  - member/2
  - next/2
  - open_file/1
  - open_file/2
  - pid2name/1
  - repair_continuation/2
  - safe_fixtable/2
  - select/1
  - select/2
  - select/3
  - select_delete/2
  - slot/2
  - sync/1
  - table/1
  - to_ets/2
  - traverse/2
  - update_counter/3
- dict
  - Top of manual page
  - append/3
  - append_list/3
  - erase/2
  - fetch/2
  - fetch_keys/1
  - filter/2
  - find/2
  - fold/3
  - from_list/1
  - is_key/2
  - map/2
  - merge/3
  - new/0
  - size/1
  - store/3
  - to_list/1
  - update/3
  - update/4
  - update_counter/3
- digraph
  - Top of manual page
  - add_edge/5
  - add_edge/4
  - add_edge/3
  - add_vertex/3
  - add_vertex/2
  - add_vertex/1
  - del_edge/2
  - del_edges/2
  - del_path/3
  - del_vertex/2
  - del_vertices/2
  - delete/1
  - edge/2
  - edges/1
  - edges/2
  - get_cycle/2
  - get_path/3
  - get_short_cycle/2
  - get_short_path/3
  - in_degree/2
  - in_edges/2
  - in_neighbours/2
  - info/1
  - new/0
  - new/1
  - no_edges/1
  - no_vertices/1
  - out_degree/2
  - out_edges/2
  - out_neighbours/2
  - vertex/2
  - vertices/1
- digraph_utils
  - Top of manual page
  - arborescence_root/1
  - components/1
  - condensation/1
  - cyclic_strong_components/1
  - is_acyclic/1
  - is_arborescence/1
  - is_tree/1
  - loop_vertices/1
  - postorder/1
  - preorder/1
  - reachable/2
  - reachable_neighbours/2
  - reaching/2
  - reaching_neighbours/2
  - strong_components/1
  - subgraph/2
  - topsort/1
- epp
  - Top of manual page
  - open/2
  - open/3
  - close/1
  - parse_erl_form/1
  - parse_file/3
- erl_eval
  - Top of manual page
  - exprs/2
  - exprs/3
  - exprs/4
  - expr/2
  - expr/3
  - expr/4
  - expr/5
  - expr_list/2
  - expr_list/3
  - expr_list/4
  - new_bindings/0
  - bindings/1
  - binding/2
  - add_binding/3
  - del_binding/2
- erl_expand_records
  - Top of manual page
  - module/2
- erl_id_trans
  - Top of manual page
  - parse_transform/2
- erl_internal
  - Top of manual page
  - bif/2
  - guard_bif/2
  - type_test/2
  - arith_op/2
  - bool_op/2
  - comp_op/2
  - list_op/2
  - send_op/2
  - op_type/2
- erl_lint
  - Top of manual page
  - module/1
  - module/2
  - module/3
  - is_guard_test/1
  - format_error/1
- erl_parse
  - Top of manual page
  - parse_form/1
  - parse_exprs/1
  - parse_term/1
  - format_error/1
  - tokens/1
  - tokens/2
  - normalise/1
  - abstract/1
- erl_pp
  - Top of manual page
  - form/1
  - form/2
  - attribute/1
  - attribute/2
  - function/1
  - function/2
  - guard/1
  - guard/2
  - exprs/1
  - exprs/2
  - exprs/3
  - expr/1
  - expr/2
  - expr/3
  - expr/4
- erl_scan
  - Top of manual page
  - string/1
  - string/2
  - string/3
  - tokens/3
  - tokens/4
  - reserved_word/1
  - token_info/1
  - token_info/2
  - attributes_info/1
  - attributes_info/2
  - set_attribute/3
  - format_error/1
- erl_tar
  - Top of manual page
  - add/3
  - add/4
  - close/1
  - create/2
  - create/3
  - extract/1
  - extract/2
  - format_error/1
  - open/2
  - table/1
  - table/2
  - t/1
  - tt/1
- ets
  - Top of manual page
  - all/0
  - delete/1
  - delete/2
  - delete_all_objects/1
  - delete_object/2
  - file2tab/1
  - file2tab/2
  - first/1
  - foldl/3
  - foldr/3
  - from_dets/2
  - fun2ms/1
  - give_away/3
  - i/0
  - i/1
  - info/1
  - info/2
  - init_table/2
  - insert/2
  - insert_new/2
  - is_compiled_ms/1
  - last/1
  - lookup/2
  - lookup_element/3
  - match/2
  - match/3
  - match/1
  - match_delete/2
  - match_object/2
  - match_object/3
  - match_object/1
  - match_spec_compile/1
  - match_spec_run/2
  - member/2
  - new/2
  - next/2
  - prev/2
  - rename/2
  - repair_continuation/2
  - safe_fixtable/2
  - select/2
  - select/3
  - select/1
  - select_count/2
  - select_delete/2
  - select_reverse/2
  - select_reverse/3
  - select_reverse/1
  - setopts/2
  - slot/2
  - tab2file/2
  - tab2file/3
  - tab2list/1
  - tabfile_info/1
  - table/1
  - test_ms/2
  - to_dets/2
  - update_counter/3
  - update_counter/3
  - update_counter/3
  - update_element/3
  - update_element/3
- file_sorter
  - Top of manual page
  - sort/1
  - sort/2
  - sort/3
  - keysort/2
  - keysort/3
  - keysort/4
  - merge/2
  - merge/3
  - keymerge/3
  - keymerge/4
  - check/1
  - check/2
  - keycheck/2
  - keycheck/3
- filelib
  - Top of manual page
  - ensure_dir/1
  - file_size/1
  - fold_files/5
  - is_dir/1
  - is_file/1
  - is_regular/1
  - last_modified/1
  - wildcard/1
  - wildcard/2
- filename
  - Top of manual page
  - absname/1
  - absname/2
  - absname_join/2
  - basename/1
  - basename/2
  - dirname/1
  - extension/1
  - flatten/1
  - join/1
  - join/2
  - nativename/1
  - pathtype/1
  - rootname/1
  - rootname/2
  - split/1
  - find_src/1
  - find_src/2
- gb_sets
  - Top of manual page
  - add/2
  - add_element/2
  - balance/1
  - delete/2
  - delete_any/2
  - del_element/2
  - difference/2
  - subtract/2
  - empty/0
  - new/0
  - filter/2
  - fold/3
  - from_list/1
  - from_ordset/1
  - insert/2
  - intersection/2
  - intersection/1
  - is_disjoint/2
  - is_empty/1
  - is_member/2
  - is_element/2
  - is_set/1
  - is_subset/2
  - iterator/1
  - largest/1
  - next/1
  - singleton/1
  - size/1
  - smallest/1
  - take_largest/1
  - take_smallest/1
  - to_list/1
  - union/2
  - union/1
- gb_trees
  - Top of manual page
  - balance/1
  - delete/2
  - delete_any/2
  - empty/0
  - enter/3
  - from_orddict/1
  - get/2
  - lookup/2
  - insert/3
  - is_defined/2
  - is_empty/1
  - iterator/1
  - keys/1
  - largest/1
  - map/2
  - next/1
  - size/1
  - smallest/1
  - take_largest/1
  - take_smallest/1
  - to_list/1
  - update/3
  - values/1
- gen_event
  - Top of manual page
  - start_link/0
  - start_link/1
  - start/0
  - start/1
  - add_handler/3
  - add_sup_handler/3
  - notify/2
  - sync_notify/2
  - call/3
  - call/4
  - delete_handler/3
  - swap_handler/3
  - swap_sup_handler/3
  - which_handlers/1
  - stop/1
  - Module:init/1
  - Module:handle_event/2
  - Module:handle_call/2
  - Module:handle_info/2
  - Module:terminate/2
  - Module:code_change/3
  - Module:format_status/2
- gen_fsm
  - Top of manual page
  - start_link/3
  - start_link/4
  - start/3
  - start/4
  - send_event/2
  - send_all_state_event/2
  - sync_send_event/2
  - sync_send_event/3
  - sync_send_all_state_event/2
  - sync_send_all_state_event/3
  - reply/2
  - send_event_after/2
  - start_timer/2
  - cancel_timer/1
  - enter_loop/4
  - enter_loop/5
  - enter_loop/5
  - enter_loop/6
  - Module:init/1
  - Module:StateName/2
  - Module:handle_event/3
  - Module:StateName/3
  - Module:handle_sync_event/4
  - Module:handle_info/3
  - Module:terminate/3
  - Module:code_change/4
  - Module:format_status/2
- gen_server
  - Top of manual page
  - start_link/3
  - start_link/4
  - start/3
  - start/4
  - call/2
  - call/3
  - multi_call/2
  - multi_call/3
  - multi_call/4
  - cast/2
  - abcast/2
  - abcast/3
  - reply/2
  - enter_loop/3
  - enter_loop/4
  - enter_loop/4
  - enter_loop/5
  - Module:init/1
  - Module:handle_call/3
  - Module:handle_cast/2
  - Module:handle_info/2
  - Module:terminate/2
  - Module:code_change/3
  - Module:format_status/2
- io
  - Top of manual page
  - columns/0
  - columns/1
  - put_chars/1
  - put_chars/2
  - nl/0
  - nl/1
  - get_chars/2
  - get_chars/3
  - get_line/1
  - get_line/2
  - getopts/0
  - getopts/1
  - setopts/1
  - setopts/2
  - write/1
  - write/2
  - read/1
  - read/2
  - read/3
  - fwrite/1
  - fwrite/2
  - fwrite/3
  - format/1
  - format/2
  - format/3
  - fread/2
  - fread/3
  - rows/0
  - rows/1
  - scan_erl_exprs/1
  - scan_erl_exprs/2
  - scan_erl_exprs/3
  - scan_erl_form/1
  - scan_erl_form/2
  - scan_erl_form/3
  - parse_erl_exprs/1
  - parse_erl_exprs/2
  - parse_erl_exprs/3
  - parse_erl_form/1
  - parse_erl_form/2
  - parse_erl_form/3
- io_lib
  - Top of manual page
  - nl/0
  - write/1
  - write/2
  - print/1
  - print/4
  - fwrite/2
  - format/2
  - fread/2
  - fread/3
  - write_atom/1
  - write_string/1
  - write_char/1
  - indentation/2
  - char_list/1
  - deep_char_list/1
  - printable_list/1
- lib
  - Top of manual page
  - flush_receive/0
  - error_message/2
  - progname/0
  - nonl/1
  - send/2
  - sendw/2
- lists
  - Top of manual page
  - all/2
  - any/2
  - append/1
  - append/2
  - concat/1
  - delete/2
  - dropwhile/2
  - duplicate/2
  - filter/2
  - flatlength/1
  - flatmap/2
  - flatten/1
  - flatten/2
  - foldl/3
  - foldr/3
  - foreach/2
  - keydelete/3
  - keyfind/3
  - keymap/3
  - keymember/3
  - keymerge/3
  - keyreplace/4
  - keysearch/3
  - keysort/2
  - keystore/4
  - keytake/3
  - last/1
  - map/2
  - mapfoldl/3
  - mapfoldr/3
  - max/1
  - member/2
  - merge/1
  - merge/2
  - merge/3
  - merge3/3
  - min/1
  - nth/2
  - nthtail/2
  - partition/2
  - prefix/2
  - reverse/1
  - reverse/2
  - seq/2
  - seq/3
  - sort/1
  - sort/2
  - split/2
  - splitwith/2
  - sublist/2
  - sublist/3
  - subtract/2
  - suffix/2
  - sum/1
  - takewhile/2
  - ukeymerge/3
  - ukeysort/2
  - umerge/1
  - umerge/2
  - umerge/3
  - umerge3/3
  - unzip/1
  - unzip3/1
  - usort/1
  - usort/2
  - zip/2
  - zip3/3
  - zipwith/3
  - zipwith3/4
- log_mf_h
  - Top of manual page
  - init/3
  - init/4
- math
  - Top of manual page
  - pi/0
  - sin/1
  - cos/1
  - tan/1
  - asin/1
  - acos/1
  - atan/1
  - atan2/2
  - sinh/1
  - cosh/1
  - tanh/1
  - asinh/1
  - acosh/1
  - atanh/1
  - exp/1
  - log/1
  - log10/1
  - pow/2
  - sqrt/1
  - erf/1
  - erfc/1
- ms_transform
  - Top of manual page
  - parse_transform/2
  - transform_from_shell/3
  - format_error/1
- orddict
  - Top of manual page
  - append/3
  - append_list/3
  - erase/2
  - fetch/2
  - fetch_keys/1
  - filter/2
  - find/2
  - fold/3
  - from_list/1
  - is_key/2
  - map/2
  - merge/3
  - new/0
  - size/1
  - store/3
  - to_list/1
  - update/3
  - update/4
  - update_counter/3
- ordsets
  - Top of manual page
  - new/0
  - is_set/1
  - size/1
  - to_list/1
  - from_list/1
  - is_element/2
  - add_element/2
  - del_element/2
  - union/2
  - union/1
  - intersection/2
  - intersection/1
  - is_disjoint/2
  - subtract/2
  - is_subset/2
  - fold/3
  - filter/2
- pg
  - Top of manual page
  - create/1
  - create/2
  - join/2
  - send/2
  - esend/2
  - members/1
- pool
  - Top of manual page
  - start/1
  - start/2
  - attach/1
  - stop/0
  - get_nodes/0
  - pspawn/3
  - pspawn_link/3
  - get_node/0
- proc_lib
  - Top of manual page
  - spawn/1
  - spawn/2
  - spawn/3
  - spawn/4
  - spawn_link/1
  - spawn_link/2
  - spawn_link/3
  - spawn_link/4
  - spawn_opt/2
  - spawn_opt/3
  - spawn_opt/4
  - spawn_opt/5
  - start/3
  - start/4
  - start/5
  - start_link/3
  - start_link/4
  - start_link/5
  - init_ack/2
  - init_ack/1
  - format/1
  - initial_call/1
  - translate_initial_call/1
  - hibernate/3
- proplists
  - Top of manual page
  - append_values/2
  - compact/1
  - delete/2
  - expand/2
  - get_all_values/2
  - get_bool/2
  - get_keys/1
  - get_value/2
  - get_value/3
  - is_defined/2
  - lookup/2
  - lookup_all/2
  - normalize/2
  - property/1
  - property/2
  - split/2
  - substitute_aliases/2
  - substitute_negations/2
  - unfold/1
- qlc
  - Top of manual page
  - append/1
  - append/2
  - cursor/1
  - delete_cursor/1
  - eval/1
  - e/1
  - fold/3
  - format_error/1
  - info/1
  - keysort/2
  - next_answers/1
  - q/1
  - sort/1
  - string_to_handle/1
  - table/2
- queue
  - Top of manual page
  - new/0
  - is_queue/1
  - is_empty/1
  - len/1
  - in/2
  - in_r/2
  - out/1
  - out_r/1
  - from_list/1
  - to_list/1
  - reverse/1
  - split/2
  - join/2
  - filter/2
  - member/2
  - get/1
  - get_r/1
  - drop/1
  - drop_r/1
  - peek/1
  - peek_r/1
  - cons/2
  - head/1
  - tail/1
  - snoc/2
  - daeh/1
  - last/1
  - liat/1
  - init/1
  - lait/1
- random
  - Top of manual page
  - seed/0
  - seed/3
  - seed/1
  - seed0/0
  - uniform/0
  - uniform/1
  - uniform_s/1
  - uniform_s/2
- re
  - Top of manual page
  - compile/1
  - compile/2
  - run/2
  - run/3
  - replace/3
  - replace/4
  - split/2
  - split/3
- regexp
  - Top of manual page
  - match/2
  - first_match/2
  - matches/2
  - sub/3
  - gsub/3
  - split/2
  - sh_to_awk/1
  - parse/1
  - format_error/1
- sets
  - Top of manual page
  - new/0
  - is_set/1
  - size/1
  - to_list/1
  - from_list/1
  - is_element/2
  - add_element/2
  - del_element/2
  - union/2
  - union/1
  - intersection/2
  - intersection/1
  - is_disjoint/2
  - subtract/2
  - is_subset/2
  - fold/3
  - filter/2
- shell
  - Top of manual page
  - history/1
  - results/1
  - catch_exception/1
  - prompt_func/1
  - start_restricted/1
  - stop_restricted/0
- shell_default
- slave
  - Top of manual page
  - start/1
  - start/2
  - start/3
  - start_link/1
  - start_link/2
  - start_link/3
  - stop/1
  - pseudo/1
  - pseudo/2
  - relay/1
- sofs
  - Top of manual page
  - a_function/1
  - canonical_relation/1
  - composite/2
  - constant_function/2
  - converse/1
  - difference/2
  - digraph_to_family/1
  - domain/1
  - drestriction/2
  - drestriction/3
  - empty_set/0
  - extension/3
  - family/1
  - family_difference/2
  - family_domain/1
  - family_field/1
  - family_intersection/1
  - family_intersection/2
  - family_projection/2
  - family_range/1
  - family_specification/2
  - family_to_digraph/1
  - family_to_relation/1
  - family_union/1
  - family_union/2
  - field/1
  - from_external/2
  - from_sets/1
  - from_sets/1
  - from_term/1
  - image/2
  - intersection/1
  - intersection/2
  - intersection_of_family/1
  - inverse/1
  - inverse_image/2
  - is_a_function/1
  - is_disjoint/2
  - is_empty_set/1
  - is_equal/2
  - is_set/1
  - is_sofs_set/1
  - is_subset/2
  - is_type/1
  - join/4
  - multiple_relative_product/2
  - no_elements/1
  - partition/1
  - partition/2
  - partition/3
  - partition_family/2
  - product/1
  - product/2
  - projection/2
  - range/1
  - relation/1
  - relation_to_family/1
  - relative_product/1
  - relative_product/2
  - relative_product1/2
  - restriction/2
  - restriction/3
  - set/1
  - specification/2
  - strict_relation/1
  - substitution/2
  - symdiff/2
  - symmetric_partition/2
  - to_external/1
  - to_sets/1
  - type/1
  - union/1
  - union/2
  - union_of_family/1
  - weak_relation/1
- string
  - Top of manual page
  - len/1
  - equal/2
  - concat/2
  - chr/2
  - rchr/2
  - str/2
  - rstr/2
  - span/2
  - cspan/2
  - substr/2
  - substr/3
  - tokens/2
  - join/2
  - chars/2
  - chars/3
  - copies/2
  - words/1
  - words/2
  - sub_word/2
  - sub_word/3
  - strip/1
  - strip/2
  - strip/3
  - left/2
  - left/3
  - right/2
  - right/3
  - centre/2
  - centre/3
  - sub_string/2
  - sub_string/3
  - to_float/1
  - to_integer/1
  - to_lower/1
  - to_lower/1
  - to_upper/1
  - to_upper/1
- supervisor
  - Top of manual page
  - start_link/2
  - start_link/3
  - start_child/2
  - terminate_child/2
  - delete_child/2
  - restart_child/2
  - which_children/1
  - count_children/1
  - check_childspecs/1
  - Module:init/1
- supervisor_bridge
  - Top of manual page
  - start_link/2
  - start_link/3
  - Module:init/1
  - Module:terminate/2
- sys
  - Top of manual page
  - log/2
  - log/3
  - log_to_file/2
  - log_to_file/3
  - statistics/2
  - statistics/3
  - trace/2
  - trace/3
  - no_debug/1
  - no_debug/2
  - suspend/1
  - suspend/2
  - resume/1
  - resume/2
  - change_code/4
  - change_code/5
  - get_status/1
  - get_status/2
  - install/2
  - install/3
  - remove/2
  - remove/3
  - debug_options/1
  - get_debug/3
  - handle_debug/4
  - handle_system_msg/6
  - print_log/1
  - Mod:system_continue/3
  - Mod:system_terminate/4
  - Mod:system_code_change/4
- timer
  - Top of manual page
  - start/0
  - apply_after/4
  - send_after/3
  - send_after/2
  - exit_after/3
  - exit_after/2
  - kill_after/2
  - kill_after/1
  - apply_interval/4
  - send_interval/3
  - send_interval/2
  - cancel/1
  - sleep/1
  - tc/3
  - tc/2
  - now_diff/2
  - seconds/1
  - minutes/1
  - hours/1
  - hms/3
- unicode
  - Top of manual page
  - bom_to_encoding/1
  - characters_to_list/1
  - characters_to_list/2
  - characters_to_binary/1
  - characters_to_binary/2
  - characters_to_binary/3
  - encoding_to_bom/1
- win32reg
  - Top of manual page
  - change_key/2
  - change_key_create/2
  - close/1
  - current_key/1
  - delete_key/1
  - delete_value/2
  - expand/1
  - format_error/1
  - open/1
  - set_value/3
  - sub_keys/1
  - value/2
  - values/1
- zip
  - Top of manual page
  - zip/2
  - zip/3
  - create/2
  - create/3
  - unzip/1
  - unzip/2
  - extract/1
  - extract/2
  - foldl/3
  - list_dir/1
  - list_dir/2
  - table/1
  - table/2
  - t/1
  - tt/1
  - zip_open/1
  - zip_open/2
  - zip_list_dir/1
  - zip_get/1
  - zip_get/2
  - zip_close/1

# supervisor_bridge

### MODULE

supervisor_bridge

### MODULE SUMMARY

Generic Supervisor Bridge Behaviour.

### DESCRIPTION

A behaviour module for implementing a supervisor_bridge, a process which connects a subsystem not designed according to the OTP design principles to a supervision tree. The supervisor_bridge sits between a supervisor and the subsystem. It behaves like a real supervisor to its own supervisor, but has a different interface than a real supervisor to the subsystem. Refer to OTP Design Principles for more information.

A supervisor_bridge assumes the functions for starting and stopping the subsystem to be located in a callback module exporting a pre-defined set of functions.

The sys module can be used for debugging a supervisor_bridge.

Unless otherwise stated, all functions in this module will fail if the specified supervisor_bridge does not exist or if bad arguments are given.

### EXPORTS

start_link(Module, Args) -> Result
start_link(SupBridgeName, Module, Args) -> Result

Types:

SupBridgeName = {local,Name} | {global,Name}
Name = atom()
Module = atom()
Args = term()
Result = {ok,Pid} | ignore | {error,Error}
Pid = pid()
Error = {already_started,Pid} | term()

Creates a supervisor_bridge process, linked to the calling process, which calls Module:init/1 to start the subsystem. To ensure a synchronized start-up procedure, this function does not return until Module:init/1 has returned.

If SupBridgeName={local,Name} the supervisor_bridge is registered locally as Name using register/2. If SupBridgeName={global,Name} the supervisor_bridge is registered globally as Name using global:register_name/2. If no name is provided, the supervisor_bridge is not registered. If there already exists a process with the specified SupBridgeName the function returns {error,{already_started,Pid}}, where Pid is the pid of that process.

Module is the name of the callback module.

Args is an arbitrary term which is passed as the argument to Module:init/1.

If the supervisor_bridge and the subsystem are successfully started the function returns {ok,Pid}, where Pid is is the pid of the supervisor_bridge.

If Module:init/1 returns ignore, this function returns ignore as well and the supervisor_bridge terminates with reason normal. If Module:init/1 fails or returns an error tuple or an incorrect value, this function returns {error,Term} where Term is a term with information about the error, and the supervisor_bridge terminates with reason Term.

### CALLBACK FUNCTIONS

The following functions should be exported from a supervisor_bridge callback module.

### EXPORTS

Module:init(Args) -> Result

Types:

Args = term()
Result = {ok,Pid,State} | ignore | {error,Error}
Pid = pid()
State = term()
Error = term()

Whenever a supervisor_bridge is started using supervisor_bridge:start_link/2,3, this function is called by the new process to start the subsystem and initialize.

Args is the Args argument provided to the start function.

The function should return {ok,Pid,State} where Pid is the pid of the main process in the subsystem and State is any term.

If later Pid terminates with a reason Reason, the supervisor bridge will terminate with reason Reason as well. If later the supervisor_bridge is stopped by its supervisor with reason Reason, it will call Module:terminate(Reason,State) to terminate.

If something goes wrong during the initialization the function should return {error,Error} where Error is any term, or ignore.

Module:terminate(Reason, State)

Types:

Reason = shutdown | term()
State = term()

This function is called by the supervisor_bridge when it is about to terminate. It should be the opposite of Module:init/1 and stop the subsystem and do any necessary cleaning up. The return value is ignored.

Reason is shutdown if the supervisor_bridge is terminated by its supervisor. If the supervisor_bridge terminates because a a linked process (apart from the main process of the subsystem) has terminated with reason Term, Reason will be Term.

State is taken from the return value of Module:init/1.

### SEE ALSO

supervisor(3), sys(3)