erlang常用模块

inets提供ftp client,http client/server,tftp client/server

>inet:getiflist().  
{ok,["lo0","en0"]} 
>inet:ifget("en0", [mtu]). 
{ok,[{mtu,1500}]}

。httpc

-module(httpc_post_stream_test). 
-compile(export_all).

-define(LEN, 1024 * 1024).

prepare_data() ->
    crypto:start(),
    {ok, Fd} = file:open("test_data.dat", [binary, write]),
    ok = file:write(Fd, lists:duplicate(crypto:rand_uniform(8182, 32768), "1")),
    ok = file:close(Fd).

test() -> 
    inets:start(), 
    ok = prepare_data(), 
    {ok, Fd1} = file:open("test_data.dat", [binary, read]), 
    BodyFun = fun(Fd) -> 
      case file:read(Fd, 512) of 
        eof -> eof; 
       {ok, Data} -> {ok, Data, Fd} 
      end 
    end,

{ok, {{_,200,_}, _, _}} = httpc:request(post, {"http://localhost:8888",[], "text/plain", {chunkify, BodyFun, Fd1}}, [], []),
    ok = file:close(Fd1).

Url = "http://example.org",
httpc:request(get, {Url, [{"Cookie", "name1=value1;name2=value2"}]}.

mnesia提供一个分布式的数据库系统

。mnesia

%% sys.config is identified via the erl command line option -config File.
%% Note that File should have no extension, e.g.
%% erl -config .../sys (if this file is called sys.config)
%%
%% In this file, you can redefine application environment variables.
%% This way, you don not have to modify the .app files of e.g. OTP applications.

[{kernel,
[{distributed, [{dist, [‘[email protected]‘,‘[email protected]‘]}]},
{start_dist_ac, true},
{sync_nodes_optional, [‘[email protected]‘,‘[email protected]‘]},
{sync_nodes_timeout, 10000}]}].

install() ->
   {ok, Nodes} = application:get_env(kernel, sync_nodes_optional),
   mnesia:delete_schema(Nodes),
   mnesia:create_schema(Nodes),
   mnesia:start(),
   mnesia:create_table(base, [{ram_copies, Nodes},{attributes, record_info(fields, base)}]).

操作

$erl -mnesia dir ‘"/home/sw2wolf/data"‘ -s mnesia start

-record(hitNum, {
    oid,
    hitnum
}).

% 在指定节点创建schema用数据表

install( Nodes ) when is_list( Nodes ) ->
    mnesia:stop(),
    mnesia:delete_schema( Nodes ),
    catch ( mnesia:create_schema( Nodes ) ),
    mnesia:start(),
    case mnesia:create_table ( hitNum, [
        { disc_copies, Nodes },
        { type, set },
        { attributes, record_info( fields, hitNum) }
    ] ) of
        { atomic, ok } -> ok;
        _Any ->
            io:format( "create table error!~n")
    end,
    mnesia:stop(),
    ok.

%增加记录
add_hitnum(HitNums) ->
    F = fun() ->
            lists:foreach( fun mnesia:write/1, HitNums)
        end,
    mnesia:transaction( F ).
%查寻
qry_hitnum() ->
    Q = qlc:q( [X || X  <- mnesia:table(hitNum)] ),
    F = fun() -> qlc:e( Q ) end,
    { atomic, Val } = mnesia:transaction( F ),
    lists:sort(Val).

limit(Table, Offset, Number) -> 
   TH = qlc:keysort(2, mnesia:table(Table)), 
   QH = qlc:q([Q || Q <- TH]), 
   QC = qlc:cursor(QH), 
%% Drop initial resuls. Handling of Offset =:= 0 not shown. 
   qlc:next_answers(QC, Offset - 1), 
   Results = qlc:next_answers(QC, Number), 
   qlc:delete_cursor(QC), 
   Results.

动态改变Mnesia表结构:

-record(old, {key, val}).
-record(new, {key, val, extra}).
Transformer =
            fun(X) ->
                      #new{key = X#old.key, val = X#old.val, extra = 42}
            end,
{atomic, ok} = mnesia:transform_table(foo, Transformer, record_info(fields, new)).

一些常用函数

 

%在NodeB上
mnesia:change_config(extra_db_nodes, [NodeA]), 
mnesia:change_table_copy_type(schema, node(), disc_copies), 
Tabs = mnesia:system_info(tables) -- [schema], 
[mnesia:add_table_copy(Tab, node(), disc_copies) || Tab <- Tabs].

 

%在NodeA上

[ mnesia:force_load_table(T) || T <- mnesia:system_info(tables) ].

mnesia:del_table_copy(schema, NodeB).

mnesia:create_schema(Nodes).

with the nodes in Nodes all up and running. You only need to call it 
from one node; it will create a schema on each node automatically.

crypto 提供加密解密相关函数,基于openssl相关实现

1>crypto:start().
2>crypto:sha("abc").

<<169,153,62,54,71,6,129,106,186,62,37,113,120,80,194,108,
156,208,216,157>>
3>crypto:stop().

ssl 实现加密socket通信,基于openssl实现

ssh 实现ssh协议

xmerl 实现XML相关解析

snmp 实现SNMP协议(Simple Network Management Protocol)

observer 用来分析与追踪分布式应用

odbc 使Erlang可以连接基于SQL的数据库

orber 实现CORBA对象请求代理服务

os_mon 提供对操作系统的监控功能

dialyzer提供一个静态的代码或程序分析工具

edoc 依据源文件生成文档

gs 可以为我们提供某些GUI的功能(基于Tcl/Tk)

zlib 压缩/解压

%The -15 parameter to the zlib:deflateInit call makes it leave out the
%zlib header and checksum. The other parameters are just the defaults.

saml_deflate(Request) ->
    Z = zlib:open(),
    ok = zlib:deflateInit(Z, default, deflated, -15, 8, default),
    [Data] = zlib:deflate(Z, Request, finish),
    ok = zlib:deflateEnd(Z),
    ok = zlib:close(Z),

base64:encode_to_string(Data).

uncompress(Archive) ->
    case file:read_file(Archive) of
    {ok,Tgz} -> 
        Tar = zlib:gunzip(Tgz),
        erl_tar:extract({binary,Tar},[{cwd,code:lib_dir()}]);
    Error -> 
         Error

end.

其它

。esmtp https://github.com/archaelus/esmtp

MimeContent = #mime_part{data = NewContent, type = inline, 
  encoding = {"7bit","text/html","utf-8"}, name = "txt.html"},

{ok, PngContent0} = file:read_file(?MAIL_PNG_LOGO), 
PngContent1 = base64:encode(PngContent0), 
PngContent = erlang:binary_to_list(PngContent1),

Atach2 = #mime_part{data = PngContent, type = attachment, 
  encoding= {"base64", "image/png", "iso-8859-1"}, name= FileNameLogo},

Msg0 = #mime_msg{} = esmtp_mime:msg(SmtpTo, SmtpFrom, SmtpSubject), 
Msg = Msg0#mime_msg{parts = [MimeContent, Atach2]}, 
esmtp:send(Msg).

时间: 2024-11-04 10:15:30

erlang常用模块的相关文章

sublime text3安装 mac os汉化/常用模块

sublime text介绍: Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim. Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等.还可自定义键绑定,菜单和工具栏.Sublime Text 的主要功能包括:拼写检查,书签,完整

python基础--常用模块与面向对象基础

1常用模块 1.1 xml xml是实现不同语言或程序之间进行数据交换的协议 xml的格式如下: <?xml version="1.0"?> <data> <country name="Liechtenstein"> <rank updated="yes">2</rank> <year>2008</year> <gdppc>141100</gdp

常用模块

1.import讲解#本质就是.py 文件,用来从逻辑上组织pyhton代码(变量.函数.类.逻辑,实现一个功能) 1.1.导入方法导入多个模块,以逗号隔开 例如 module模块: name = "kangkang" def fun(num): print("num",num) 1) import module print(module.name) #调用模块下的参数 module.fun(23) #调用模块下的方法 结果为: kangkang num 23 2)

Python基础(正则、序列化、常用模块和面向对象)-day06

写在前面 上课第六天,打卡: 天地不仁,以万物为刍狗: 一.正则 - - 在线正则工具:http://tool.oschina.net/regex/ - 二.序列化 - json - pickle 三.常用模块介绍 - time - random - os - sys - shutil - shelve - xml - configparser - hashlib - subprocess - logging - re - ... 四.面向对象 - 五.day06课后作业 题目要求: - 模拟实

python——常用模块

time.asctime(time.localtime(1234324422)) python--常用模块 1 什么是模块: 模块就是py文件 2 import time #导入时间模块 在Python中,通常有这三种方式来表示时间:时间戳.元组(struct_time).格式化的时间字符串: (1)时间戳(timestamp) :通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行"type(time.time())",返回的是float类型.

python常用模块(1):collections模块和re模块(正则表达式详解)

从今天开始我们就要开始学习python的模块,今天先介绍两个常用模块collections和re模块.还有非常重要的正则表达式,今天学习的正则表达式需要记忆的东西非常多,希望大家可以认真记忆.按常理来说我们应该先解释模块概念性东西再来学习具体的模块使用.可是直接解释可能反而不好理解,模块的使用非常方便,所以我们采用先介绍使用常用模块过两天再具体进行模块概念的讲解. 预习: 实现能计算类似 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998

Python学习笔记-常用模块

1.python模块 如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失.因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行.这就是传说中的 脚本.随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件.你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来拷去. 为了满足这些需要,Python 提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用.这样的文件被称

python学习笔记(5)--迭代器,生成器,装饰器,常用模块,序列化

生成器 在Python中,一边循环一边计算的机制,称为生成器:generator. 如: 1 >>> g = (x * x for xin range(10)) 2 >>> g3 <generator object <genexpr> at 0x1022ef630> 此处g就是一个生成器. 迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是gene

进击的Python【第五章】:Python的高级应用(二)常用模块

Python的高级应用(二)常用模块学习 本章学习要点: Python模块的定义 time &datetime模块 random模块 os模块 sys模块 shutil模块 ConfigParser模块 shelve模块 xml处理 re正则表达式 一.Python模块的定义 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt这个函数,必须用语句"#include<math.h>"引入math.h这个头文件,否则是无法正常进行调用的.那么在Python中,如