- 浏览: 35318 次
- 性别:
- 来自: 北京
最近访客 更多访客>>
文章分类
最新评论
-
derlang:
mryufeng 写道方向很好哦多谢鼓励,共同进步
Erlang学习告一段落 -
mryufeng:
方向很好哦
Erlang学习告一段落 -
crackcell:
一起进步……
Erlang学习告一段落
问题:
EFS是我最近学习Erlang的过程中写的一个mini分布式文件系统,仿Google File System。希望给它提供一套C API,以方便利用现有的C库,如与NFSv3,或Fuse的整合。用Erl_interface库可以很easy的做到这一点,这是否从C调用Erlang的唯一方法?Port或linked-in Port是Erlang调C实现的功能,Port是在Erlang一方启动外部程序的,反过来行吗?(由port所启动的外部程序作为server,提供c api,也是可行的,按面向对象的理解,进程作为对象,提供服务作为接口)。
本质上,不管Port,还是Erl_interface,不同语言都是通过IPC机制来实现通信的,类似socket通信,要处理的是通信协议,链接管理,数据的编码和解码等。Erl_interface能极大的简化这些任务。
Ports provide the basic mechanism for communication with the external world, from Erlang's point of view. They provide a byte-oriented interface to an external program. When a port has been created, Erlang can communicate with it by sending and receiving lists of bytes (not Erlang terms). This means that the programmer may have to invent a suitable encoding and decoding scheme.
A C program which uses the Erl_Interface functions for setting up a connection to and communicating with a distributed Erlang node is called a C node, or a hidden node. The main advantage with a C node is that the communication from the Erlang programmer's point of view is extremely easy, since the C program behaves as a distributed Erlang node.
大概思路如下:
EFS是我最近学习Erlang的过程中写的一个mini分布式文件系统,仿Google File System。希望给它提供一套C API,以方便利用现有的C库,如与NFSv3,或Fuse的整合。用Erl_interface库可以很easy的做到这一点,这是否从C调用Erlang的唯一方法?Port或linked-in Port是Erlang调C实现的功能,Port是在Erlang一方启动外部程序的,反过来行吗?(由port所启动的外部程序作为server,提供c api,也是可行的,按面向对象的理解,进程作为对象,提供服务作为接口)。
本质上,不管Port,还是Erl_interface,不同语言都是通过IPC机制来实现通信的,类似socket通信,要处理的是通信协议,链接管理,数据的编码和解码等。Erl_interface能极大的简化这些任务。
引用
Ports provide the basic mechanism for communication with the external world, from Erlang's point of view. They provide a byte-oriented interface to an external program. When a port has been created, Erlang can communicate with it by sending and receiving lists of bytes (not Erlang terms). This means that the programmer may have to invent a suitable encoding and decoding scheme.
A C program which uses the Erl_Interface functions for setting up a connection to and communicating with a distributed Erlang node is called a C node, or a hidden node. The main advantage with a C node is that the communication from the Erlang programmer's point of view is extremely easy, since the C program behaves as a distributed Erlang node.
大概思路如下:
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <errno.h> #include "erl_interface.h" #include "ei.h" #include "efs.h" int erlang_fd = -1; /* -------------------------------------------------- */ /* API */ /* -------------------------------------------------- */ int efs_init() { int ret, fd; erl_init(NULL, 0); if (erl_connect_init(1, "secretcookie", 0) == -1) erl_err_quit("erl_connect_init"); if ((fd = erl_connect("e1@uss")) < 0) erl_err_quit("erl_connect"); fprintf(stderr, "Connected to e1@uss\n\r"); erlang_fd = fd; return 0; } int efs_destroy() { return 0; } int efs_create(const char *path, int mode) { int ret; ETERM *args; ETERM *reply; args = erl_format("[~s]", path); reply = erl_rpc(erlang_fd, "efs", "create", args); if (reply == NULL) { ret = EINVAL; fprintf(stderr, "error %d\n", ret); goto err_ret; } erl_free_term(reply); erl_free_term(args); return 0; err_ret: erl_free_term(args); return ret; } int efs_close(int fd) { return 0; } /** * test utilities. * create fcount files, every file size is fsize. */ int efs_shell_ww(int fcount, int fsize) { int ret; ETERM *args; ETERM *reply; args = erl_format("[~i,~i]", fcount, fsize); reply = erl_rpc(erlang_fd, "efs_shell", "ww", args); if (reply == NULL) { ret = EINVAL; fprintf(stderr, "error %d\n", ret); goto err_ret; } erl_free_term(reply); erl_free_term(args); return 0; err_ret: erl_free_term(args); return ret; } /* -------------------------------------------------- */ /* Entry point */ /* -------------------------------------------------- */ int main(int argc, char **argv) { int ret; efs_init(); ret = efs_create("afile", 0644); ret = efs_shell_ww(100, 1024*1024); return 0; }
发表评论
-
Erlang应用列表
2010-11-02 17:47 774本文收集Erlang的应用列表,随时更新维护 WebS ... -
安装wx成功
2010-11-01 23:10 865今晚下定决心,要安装wx for Erlang,经过几个小时的 ... -
几个有趣的Erlang项目
2010-07-15 18:45 881Riak Scalaris CouchDB Disco ... -
mnesia schema management
2010-06-19 16:59 858Q: 加入一个新节点到Mnesia System &g ... -
日日亲近之
2010-06-03 19:19 29净空法师有一读书法:一门深入,长时熏修。细细想来,确有至理存在 ... -
学习erlang三个月小节
2010-06-01 21:44 831期间主要做了 - 看erlang programmin ... -
actors style of concurrent programming
2010-05-01 19:46 477from <<Programming in sca ... -
对Erlang的学习需要深入
2010-04-30 17:56 57用Erlang写了一个集群管理和监控系统,初具 ... -
Erlang标准库代码
2010-04-21 22:35 765欲掌握OTP,可以多读读Erlang标准库代码,rpc, os ... -
Erlang集群管理系统中遇到的一些小问题
2010-03-10 17:31 1467erlang节点之间的文件传输 # file:read_fil ... -
Erlang学习告一段落
2010-02-28 17:13 1168学习了一个多月的Erlang,很开阔眼界。最近在公司里建议用E ... -
gen_server: handle_cast VS handle_info
2010-02-20 15:17 2545http://www.trapexit.org/forum/v ... -
开源项目egfs
2010-02-19 22:21 936在http://projects.trapexit.org/w ... -
Erlang interoperability
2010-02-17 16:33 708在HTML文档的 doc/tutorial下有文件(新添Mak ... -
mini code and tools
2010-02-17 12:09 581on startup: ./.erlang $HOME/.e ... -
Erlang中的各类文件
2010-02-15 10:45 756[按] 还是多看看这个http://erlangdisplay ... -
Erlang bytecode
2010-02-10 18:26 812http://mryufeng.iteye.com yufe ... -
Erlang的基准测试
2010-02-08 23:11 744需要测试Erlang系统各个方面的性能。 进程创建和并发 ... -
Erlang的代码加载过程
2010-02-08 23:05 608code:load_file/1 提个问题在这儿,慢 ... -
Erlang中的进程表示
2010-02-08 22:56 838test1() -> Pid = spaw ...
相关推荐
1、完善的Web表现层开发包:为企业Web表现层开发人员提供的一套完整、高效、美观的B/S结构设计表现层解决方案。 a)JS + DIV + CSS的表现层设计,与语言无关,支持各种编程语言环境; b)完善的JS类库,让各种优美...
1、完善的Web表现层开发包:为企业Web表现层开发人员提供的一套完整、高效、美观的B/S结构设计表现层解决方案。 a)JS + DIV + CSS的表现层设计,与语言无关,支持各种编程语言环境; b)完善的JS类库,让各种优美...
1、完善的Web表现层开发包:为企业Web表现层开发人员提供的一套完整、高效、美观的B/S结构设计表现层解决方案。 a)JS + DIV + CSS的表现层设计,与语言无关,支持各种编程语言环境; b)完善的JS类库,让各种优美的...
`acl.c`很可能是一个实现ACL管理功能的C语言程序,可能包括添加、删除和查询ACL条目的函数。 2. **`ecdsa_test.c`**:ECDSA(Elliptic Curve Digital Signature Algorithm)是一种基于椭圆曲线密码学的数字签名算法...
在实现上,SDelete的源代码包括了C语言编写的Sdel.c文件,这是整个程序的主要实现部分,包含了所有的函数定义和逻辑处理。其他如sdel.dsp和sdel.dsw是Visual Studio的项目文件,用于构建和调试程序。resource.h包含...
使用Amazon Elastic Block Store (EBS)优化的Amazon EFS(Amazon Elastic File System),因为EFS支持多个EC2实例和Fargate任务的并发访问,并且可以提供高吞吐量和低延迟,这对于机器学习工作负载特别重要。EFS还...
NTFS提供了许多FAT(File Allocation Table)文件系统不具备的功能,如安全性、磁盘配额、事务处理等。在NTFS中,文件和文件夹的安全性通过访问控制列表(ACLs)实现,允许精确地控制用户对文件和目录的访问权限。...
- **文件操作**:提供标准C语言风格的API,支持高效小数据存取。 ### 接口通信方式 - **Client-Server模型**:通过API调用和回调实现通信。 - **事件注册与取消**:使用`SCI_RegisterMsg`和`SCI_UnregisterMsg`...
答案C指出,新可用区的路由表未配置为将流量路由到EFS的VPC终端节点,这是问题的关键。EFS需要正确的路由才能使实例访问文件系统。其他选项涉及安全组和IAM权限,但不是直接原因。 5. **跨账户部署IAM角色**: ...
3. **嵌入式文件系统(Embedded File System, EFS)**:嵌入式文件系统是专为资源有限的嵌入式设备设计的,它提供了类似操作系统中文件和目录的抽象,使得数据可以按文件形式组织和访问。EFS通常包括文件的创建、...
- 另外,还有一些路径指向了特定的Java类和库文件,如`com/efs/sdk/base/core/f/c.java`和`lib/armeabi-v7a/libcrashsdk.so`,这些可能包含了APP的核心功能代码或第三方库。 5. **服务器信息**: - 除了上述域名...
这个指南由AWS解决方案架构师撰写,旨在为读者提供一个全面了解容器和云平台集成的视角。 首先,容器的概念借鉴了物流业中的集装箱思想,允许应用程序及其依赖项在不同的计算环境中无缝移动和运行,而无需关心底层...
:test_tube: 如何从EFS检索日志 :package: 安装 安装cli。 然后在终端中运行以下命令 $ npm ci npm ci将确保直接基于package-lock.json文件安装npm依赖项。 这只需要运行一次。 :mage: 如何在本地打包 $ npx ...
NTFS相比其前驱FAT(File Allocation Table)文件系统,提供了更高级别的功能和安全性,例如:事务处理、文件权限管理、磁盘配额、加密文件系统(EFS)等。 备份NTFS文件系统是一项关键的任务,因为它包含了操作...
通过SageMaker的Endpoint,可以将模型暴露为API,供其他系统调用。 9. **云原生工具集成**:Python脚本可以与AWS SDK for Python (Boto3) 集成,以利用AWS的各种服务,如S3(存储数据)、DynamoDB(数据库)或...
之前为Winternals公司提供的免费工具,Winternals原本是一间主力产品为系统复原与资料保护的公司,为了解决工程师平常在工作上遇到的各种问题,便开发出许多小工具。之后他们将这些工具集合起来称为Sysinternals,并放在...