Erlang gen_server和ets简单应用

来源:互联网 发布:金山打字mac 编辑:程序博客网 时间:2024/05/22 13:14
%%Author:Lee%%Desc:学生管理的小例子 %%gen_server-module(stuManager).%% gen_server callbacks-export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]).%% External exports-export([start/0,add_User/1,remove_User/1,find_User/1,show/0]).%%学生数据信息-record(userInfo,{id=1,name,sex,age}).%%接口函数%%添加学生 add_User%%移除学生 remove_User%%查询学生 find_User%%显示所有学生 show%%=======================================================start()->gen_server:start_link({local,?MODULE},?MODULE,[],[]).%% --------------------------------------------------------------------%% Function: init/1%% Description: Initiates the server%% Returns: {ok, State}          |%%          {ok, State, Timeout} |%%          ignore               |%%          {stop, Reason}%% --------------------------------------------------------------------init([])->{ok,ets:new(?MODULE,[set,named_table,{keypos,3}])}.%% --------------------------------------------------------------------%% Function: handle_call/3%% Description: Handling call messages%% Returns: {reply, Reply, State}          |%%          {reply, Reply, State, Timeout} |%%          {noreply, State}               |%%          {noreply, State, Timeout}      |%%          {stop, Reason, Reply, State}   | (terminate/2 is called)%%          {stop, Reason, State}            (terminate/2 is called)%% --------------------------------------------------------------------handle_call({add,User},_From,_State)->{A,B,C} = User,New_Record=#userInfo{name=A,sex=B,age=C},Reply = ets:insert(?MODULE,New_Record),{reply,Reply,_State};handle_call({remove,User},_From,_State)->Reply = ets:delete(?MODULE,User),{reply,Reply,_State};handle_call({find,User},_From,_State)->Reply = ets:lookup(?MODULE,User),{reply,Reply,_State}.%% --------------------------------------------------------------------%% Function: handle_cast/2%% Description: Handling cast messages%% Returns: {noreply, State}          |%%          {noreply, State, Timeout} |%%          {stop, Reason, State}            (terminate/2 is called)%% --------------------------------------------------------------------handle_cast(_Msg, State) ->    {noreply, State}.%% --------------------------------------------------------------------%% Function: handle_info/2%% Description: Handling all non call/cast messages%% Returns: {noreply, State}          |%%          {noreply, State, Timeout} |%%          {stop, Reason, State}            (terminate/2 is called)%% --------------------------------------------------------------------handle_info(_Info,State)->{noreply,State}.%% --------------------------------------------------------------------%% Function: terminate/2%% Description: Shutdown the server%% Returns: any (ignored by gen_server)%% --------------------------------------------------------------------terminate(_Reason, _State) ->    ok.%% --------------------------------------------------------------------%% Func: code_change/3%% Purpose: Convert process state when code is changed%% Returns: {ok, NewState}%% --------------------------------------------------------------------code_change(_OldVsn, State, _Extra) ->    {ok, State}.%% --------------------------------------------------------------------%%% Internal functions%% --------------------------------------------------------------------add_User(User)->gen_server:call(?MODULE,{add,User}).remove_User(User)->gen_server:call(?MODULE,{remove,User}).find_User(User)->gen_server:call(?MODULE,{find,User}).show()->List = ets:tab2list(?MODULE),io:format("~13w => ~p~n",[set,List]).
                                             
0 0
原创粉丝点击