非常教程

Erlang 20参考手册

erl_interface

erl_eterm

C库

erl_eterm

库摘要

Erlang项构造函数。

描述

本模块提供了创建和操作Erlang术语的功能。

一个Erlang项由类型的C结构表示ETERM。应用程序不应该直接引用此结构中的任何字段,因为它可以在将来的版本中更改以提供更快,更紧凑的术语存储。相反,应用程序应该使用提供的宏和函数。

以下每个宏都将一个ETERM指针作为参数。如果测试为真,则宏返回非零值,否则返回非零值0

ERL_IS_INTEGER(t)如果t是整数,则为真.

ERL_IS_UNSIGNED_INTEGER(t)如果t是整数,则为真.

ERL_IS_FLOAT(t)如果t是浮点数,则为真.

ERL_IS_ATOM(t)如果t是atom.

ERL_IS_PID(t) 如果t是pid(进程标识符),则为真.

ERL_IS_PORT(t)如果t是port,则为真.

ERL_IS_REF(t)如果t是reference,则为真.

ERL_IS_TUPLE(t)如果t是元组,则为真.

ERL_IS_BINARY(t) t是二进制.

ERL_IS_LIST(t)如果t是一个包含零个或多个元素的列表,则为真.

ERL_IS_EMPTY_LIST(t)如果t为空列表,则为真.

ERL_IS_CONS(t)如果t是包含至少一个元素的列表,则为真。

以下宏可用于检索Erlang术语的部分内容。所有这些都不进行任何类型检查。如果您传递ETERM*包含错误的类型。例如,将元组传递给ERL_ATOM_PTR()可能会导致垃圾。

char * ERL_ATOM_PTR(t)char * ERL_ATOM_PTR_UTF8(t)表示原子的字符串t.

int ERL_ATOM_SIZE(t)int ERL_ATOM_SIZE_UTF8(t)原子的长度(以字节为单位)t.

void * ERL_BIN_PTR(t)指向内容的指针t.

int ERL_BIN_SIZE(t)二进制对象的长度(以字节为单位)t.

int ERL_INT_VALUE(t)t.

unsigned的整数ERL_INT_UVALUE(t)t.

double的无符号整数值ERL_FLOAT_VALUE(t)浮点值(t)EID_PID_NODE(t)ETERM * ERL_PID_NODE_UTF8(t)pid t.int中的节点ERL_PID_NUMBER(t)pid中的序列号t.int ERL_PID_SERIAL(t)pid中的序列号t.

int ERL_PID_CREATION(t) (t)端口t.

int中的序列号ERL_PORT_CREATION(t)端口t.

ETERM中的创建号* ERL_PORT_NODE(t)ETERM * ERL_PORT_NODE_UTF8(t)端口t.

int中的节点ERL_REF_NUMBER(t)参考编号的第一部分。 ERL_REF_NUMBERS(t)指向参考编号数组的指针ERL_REF_LEN(t)参考编号中使用的参考编号数量ERL_REF_CREATION(t)参考编号中的创建编号ERL_TUPLE_SIZE (t)元组中元素的数量t.ETERM * ERL_CONS_HEAD(t)列表t.ETERM的头元素* ERL_CONS_TAIL(t)表示列表t的尾部元素的列表。

输出

ETERM *erl_cons(head, tail)

类型

将两个Erlang术语连接在一起,将头部置于尾部,从而创建一个cons单元。 为了做出正确的列表,尾巴总是成为一个列表或一个空列表。 注意NULL不是一个有效的列表。

  • head是要增加的新术语。
  • tail是连接的现有列表head

函数返回一个新列表。

ERL_CONS_HEAD(list)ERL_CONS_TAIL(list)可用于从列表中检索头尾组件。erl_hd(list)erl_tl(list)做同样的事情,但是检查这个论点真的是一个列表。

例子:

ETERM *list,*anAtom,*anInt;
anAtom = erl_mk_atom("madonna");
anInt  = erl_mk_int(21);
list   = erl_mk_empty_list();
list   = erl_cons(anAtom, list);
list   = erl_cons(anInt, list);
 ... /* do some work */
erl_free_compound(list);
        

ETERM *erl_copy_term(term)

类型

创建并返回Erlang项的副本。term...

ETERM *erl_element(position, tuple)

类型

从Erlang元组中提取指定的元素。

  • position指定要从哪个元素检索tuple.元素编号从1开始。
  • tuple是至少包含了一个Erlang项的position元素。

返回与请求元素对应的新Erlang项,如果position大于元组的arity,则返回NULL。

ETERM *erl_hd(list)

类型

从列表中提取第一个元素。

list是一个包含列表的Erlang术语。

返回与列表中的head head元素对应的Erlang项,或NULL指针list不是名单。

void erl_init(NULL, 0)

类型

类中的任何其他函数之前都必须调用此函数。Erl_Interface库初始化库函数。参数必须指定为erl_init(NULL,0)...

int erl_iolist_length(list)

类型

返回I/O列表的长度。

list是包含I/O列表的Erlang术语。

返回列表的长度,如果列表不是I / O列表,则返回-1。

有关I/O列表的定义,请参见erl_iolist_to_binary...

ETERM *erl_iolist_to_binary(term)

类型

将I/O列表转换为二进制术语。

list是一个包含列表的Erlang术语。

返回Erlang二进制项,或如果list不是I/O名单则返回NULL

非正式地说,I/O列表是可以发送到Erlang端口的字符和二进制文件的深层列表。在BNF中,I/O列表的正式定义如下:

iolist ::= []
        |   Binary
        |   [iohead | iolist]
        ;
iohead ::= Binary
        |   Byte (integer in the range [0..255])
        |   iolist
        ;
        

char *erl_iolist_to_string(list)

类型

将I/O列表转换为NULL-终止C字符串。

list是包含I/O列表的Erlang术语。I/O列表不能包含整数0,因为C字符串可能不包含此值,除非作为终止标记。

返回一个指向包含字符串的动态分配缓冲区的指针。 如果列表不是I / O列表,或者列表包含整数0,则返回NULL。 使用erl_free()释放分配的缓冲区是调用者的责任。

有关I/O列表的定义,请参见erl_iolist_to_binary...

int erl_length(list)

类型

确定正确列表的长度。

list是一个包含正确列表的Erlang术语。在适当的列表中,除了最后一个指向另一个列表单元格之外的所有尾部,以及最后一个尾部指向一个空列表。

如果列表不是正确的列表,则返回-1。

ETERM *erl_mk_atom(string)

类型

创造一个原子。

string用于创建原子的字符序列。

返回包含原子的Erlang项。请注意,调用者有责任确保string包含原子的有效名称。

ERL_ATOM_PTR(atom)和ERL_ATOM_PTR_UTF8(atom)可用于检索原子名称(作为NULL终止的字符串)。 ERL_ATOM_SIZE(atom)和ERL_ATOM_SIZE_UTF8(atom)返回原子名称的长度。

在Erlang / OTP R16中引入了UTF-8变体,并且返回的字符串在旧版本中ERL_ATOM_PTR(atom)未被NULL终止。

ETERM *erl_mk_binary(bptr, size)

类型

从包含字节序列的缓冲区生成Erlang二进制对象。

  • bptr指向包含要转换的数据的缓冲区的指针。
  • size表示bptr...

返回一个Erlang二进制对象。

ERL_BIN_PTR(bin)检索指向二进制数据的指针。ERL_BIN_SIZE(bin)检索大小。

ETERM *erl_mk_empty_list()

创建并返回一个空的Erlang列表。注意NULL不用于表示空列表;请使用此函数。

ETERM *erl_mk_estring(string, len)

类型

从字节序列创建列表。

  • string包含字节序列的缓冲区。缓冲区不需要NULL-终止。
  • lenstring的长度

返回对应于中的字符序列的Erlang列表对象string

ETERM *erl_mk_float(f)

类型

创建一个Erlang浮子。

f要转换为Erlang浮点数的值。

如果f不是有限的,则返回具有f或NULL指定值的Erlang浮点对象。

ERL_FLOAT_VALUE(t)可以用于从Erlang浮点数中检索值。

ETERM *erl_mk_int(n)

类型

创建一个Erlang整数。

n要转换为Erlang整数的值。

返回一个Erlang整数对象,该对象的值为n...

ERL_INT_VALUE(t)可以用于从Erlang整数中检索值。

ETERM *erl_mk_list(array, arrsize)

类型

从Erlang术语数组中创建一个Erlang列表,使列表中的每个元素对应于数组中的一个元素。

  • array是一组Erlang术语。
  • arrsize是数组中的元素的数量。

函数创建一个Erlang列表对象,其长度arrsize中的术语中,哪些元素被摘除。array...

ETERM *erl_mk_long_ref(node, n1, n2, n3, creation)

类型

创建一个Erlang引用,有82位。

  • nodeC节点的名称。
  • n1,n2和n3可以看作是一个大的数字n1 * 2 ^ 64 + n2 * 2 ^ 32 + n3,这对于为给定C节点创建的每个参考都是唯一选择的。
  • creation是任意数字。

注意n3creation由于精度有限,因此只使用这些数字的低18位和2位。

返回Erlang引用对象。

ERL_REF_NODE(ref)ERL_REF_NUMBERS(ref)ERL_REF_LEN(ref),和ERL_REF_CREATION(ref)可被用于检索用于创建参考值。

ETERM *erl_mk_pid(node, number, serial, creation)

类型

创建一个Erlang进程标识符(pid)。Erlang进程希望与C节点通信时可以使用生成的pid。

  • nodeC节点的名称。
  • numberserialcreation是任意数字。请注意,这些数字的精度有限,因此只使用这些数字的低位15,3和2位。

返回Erlang PID对象。

ERL_PID_NODE(pid)ERL_PID_NUMBER(pid)ERL_PID_SERIAL(pid),和ERL_PID_CREATION(pid)可用于获取用于创建PID四个值。

ETERM *erl_mk_port(node, number, creation)

类型

创建一个Erlang端口标识符。

  • nodeC节点的名称。
  • numbercreation是任意数字。请注意,它们的精度有限,因此只使用这些数字的低18位和2位。

返回一个Erlang端口对象。

ERL_PORT_NODE(port)ERL_PORT_NUMBER(port)ERL_PORT_CREATION可以用来检索用于创建端口的三个值。

ETERM *erl_mk_ref(node, number, creation)

类型

创建一个只有18位的旧Erlang引用 - 用erl_mk_long_ref代替。

  • nodeC节点的名称。
  • number为给定的C节点创建的每个引用都要唯一地选择。
  • creation是任意数字。

注意numbercreation由于精度有限,因此只使用这些数字的低18位和2位。

返回Erlang引用对象。

ERL_REF_NODE(ref)ERL_REF_NUMBER(ref)ERL_REF_CREATION(ref)可以用于检索用于创建参考的三个值。

ETERM *erl_mk_string(string)

类型

创建一个列表。NULL-终止字符串

stringNULL从中创建列表的终止字符序列(即,C字符串)。

返回一个Erlang列表。

ETERM *erl_mk_tuple(array, arrsize)

类型

从Erlang术语数组中创建一个Erlang元组。

  • array是一组Erlang术语。
  • arrsize中的元素数。array...

该函数创建一个Erlang元组,size其元素是从元素中取出的array

要检索一个元组的大小,可以使用erl_size函数(它检查选中的项的类型,适用于二进制和元组),或者ERL_TUPLE_SIZE(元组)返回元组的元数。 erl_size()做同样的事情,但它检查参数是一个元组。 erl_element(index,tuple)返回与元组中给定位置相对应的元素。

ETERM *erl_mk_uint(n)

类型

创建一个Erlang无符号整数。

n要转换为Erlang无符号整数的值。

返回一个Erlang无符号整数对象,该对象的值为n...

ERL_INT_UVALUE(t)可用于从Erlang无符号整数中检索值。

ETERM *erl_mk_var(name)

类型

创建一个未绑定的Erlang变量。以后可以通过模式匹配或赋值绑定变量。

name指定变量的名称。

返回一个具有名称的Erlang变量对象。name...

int erl_print_term(stream, term)

类型

将指定的Erlang项打印到指定的输出流。

  • stream指示函数要在何处发送其输出。
  • term是要打印的Erlang术语。

返回在成功时写入的字符数,否则为负值。

void erl_set_compat_rel(release_number)

类型

默认情况下,Erl_Interface库只能保证与其他Erlang/OTP组件兼容。Erl_Interface图书馆本身。例如,Erl_Interface在默认情况下,Erlang/OTP R10与Erlang/OTP R9的Erlang模拟器不兼容。

调用erl_set_compat_rel(release_number)Erl_Interface库设置为发布的兼容模式release_number。有效范围release_number是7,当前版本。这使得与早期版本的Erlang / OTP组件进行通信成为可能。

如果调用此函数,则只能在函数调用后直接调用该函数erl_init()

警告

如果不小心使用此功能,您可能会遇到麻烦。始终确保所有通信组件要么来自同一个Erlang/OTP版本,要么来自X版和Y版,其中Y版的所有组件都处于X版的兼容模式。

int erl_size(term)

类型

返回Erlang元组的重要性或Erlang二进制对象中的字节数。

term是Erlang元组或Erlang二进制对象。

返回如上所述的术语大小,如果术语不是两种支持类型之一,则返回-1。

ETERM *erl_tl(list)

类型

从列表中提取尾部。

list是一个包含列表的Erlang术语。

返回与原始列表相对应的Erlang列表减去第一个元素,或者NULL指针if list不是列表。

ETERM *erl_var_content(term, name)

类型

以Erlang项返回指定变量的内容。

  • term是一个Erlang术语。为了使此函数成功,term必须是具有指定名称的Erlang变量,或者它必须是包含具有指定名称的变量的Erlang列表或元组。其他Erlang类型不能包含变量。
  • nameErlang变量的名称。

返回与term中的name值相对应的Erlang对象。 如果在term中没有找到名称为name的变量,或者term不是有效的Erlang术语,则返回NULL。

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1