码迷,mamicode.com
首页 > 移动开发 > 详细

创建Erlang的Application

时间:2015-11-26 10:57:20      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

我们写完一组功能模块后(在erlang中,以module为单位),总是希望这一组模块,可以打包成一个应用,作为一个单独的整个,可以启动,停止,象mnesia一样。并可以在其它应用中引用。如何来做到这一点呢。每一个应用都是通过application:start系列函数来启动,application:stop可以停止一个应用。 

一个应用需要一个.app文件来描述,主要描述它包括哪些文件,参数等。 



如果在启动erlang的VM时就启动一个应用呢,实际上,我们是没有办法通过VM的参数来直接启动一个自定义应用,有些参数如:start_sasl可以启动一些内部的标准的build-in应用,但是我们可以给VM一个执行入口,这就象C语言或是java语言的main函数一样,VM启动时,执行这个程序的入口点,这样就可以在这个入口中执行启动应用的操作。 

这个入口点通过参数-s 来指定。下面我们来看一个例子: 


1.   erl  -s erlycomet_demo 
     这个参数指定,VM启动后,调用erlycomet_demo:start()无参函数 

2.   在erlycomet_demo:start()函数中,我们写如下代码: 
        application:start(erlycomet_demo). 

        上面这句话,启动一个erlycomet_demo的应用,这里,VM就会在搜索目录中找到erlycomet_demo.app这个文件,如果不到,报错,如果找到,则按这个文件中的指示,启动erlycomet_demo应用。这一部分可以参看相关的文档,简单的,在erlycomet_demo中一搬有一个参数{mod,{mod_name_app,[]}} 
        这个参数指示,调用mod_name_app:start(_type,Argu)这个函数。以erlycomet_demo为例,这个调用进入到erlycomet_demo_app:start(_type,Argu)中, 


3. 在erlycomet_demo_app的start(_type,Argu)中,启动 一个supervisor进程,进而启动子进程。如下所示: 
        erlycomet_demo_sup:start_link(Args). 



了解了,我们是通过application为单位来打包应用的,那么我们如何才能共用应用呢??比如,我们如何在应用A中使用应用2的功能呢??答应是:以应用为单位来进行引用,例如:我们要便用mnesia功能,我就就调用mnesia:start()或是在应用A的application中指定,要启动mnesia。  在OPT中,有很多应用都是相互独立,而又相互引用的。比如:mnesia, crpyto,inet 等。

创建Erlang的Application

标签:

原文地址:http://www.cnblogs.com/huangxiaoyi/p/4996804.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!