erlang 应用获取系统参数

很多时候,我们的程序需要一些预定义的参数,比如上次说的tcp_server的例子

一般参数有几种途径,具体参考这里http://blog.yufeng.info/archives/2852

app里面,env字段,比如,我们的tcp_server_app.src

{application, tcp_server,
 [
  {description, ""},
  {vsn, "0.1"},
  {registered, []},
  {applications, [
                  kernel,
                  stdlib
                 ]},
  {mod, { tcp_server_app, []}},
  {env, [
      {listen_port,7000}
  ]}
 ]}.

这种直接编译以后运行,不需要rebar generate

还有一种,放基于rebar项目的rel/files/sys.config里面,例如

[
 {sasl, [
         {sasl_error_logger, {file, "log/sasl-error.log"}},
         {errlog_type, error},
         {error_logger_mf_dir, "log/sasl"},      % Log directory
         {error_logger_mf_maxbytes, 10485760},   % 10 MB max file size
         {error_logger_mf_maxfiles, 5}           % 5 files max
        ]},
 
 {tcp_server,[
     {listen_port,7000}
    ]}
].

tcp_server是实现了application的behavior的模块名字

应用里面的代码大概就是这样

-define(DEF_PORT,  2222).

get_app_env(Opt, Default) ->
    case application:get_env(Opt) of
        {ok, Val} -> Val;
        _ ->
            case init:get_argument(Opt) of
                [[Val | _]] -> Val;
                error       -> Default
            end
    end.

ListenPort = get_app_env(listen_port, ?DEF_PORT).
原文地址:https://www.cnblogs.com/ziyouchutuwenwu/p/4078483.html