zoukankan      html  css  js  c++  java
  • 未公开的erlang:port_s/get_data

    我们通常在使用port的时候, 需要把他同其他的上下文关联起来, 以便在port给我们发生数据的时候, 我们能根据绑定的上下文, 知道如何处理数据.
    有2种办法:
    1. 用ets来保存{Port, Ctx},这个比较慢, 每次都要查表.
    2. 用Port本身的空间来保存Ctx. erlang:port_set_data 和erlang:port_get_data就是干这类事情的, 一步到位, 多核free.

    不啰嗦上代码:

    root@ubuntu:~# echo test >> test.dat
    
    root@ubuntu:~# erl
    
    Erlang R14A (erts-5.8) 1 [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false] [lock-counting]
    
    Eshell V5.8  (abort with ^G)
    
    1>  {ok,{_,_,{Port,_}}} = file:open("test.dat", [read,raw]).
    
    {ok,{file_descriptor,prim_file,{#Port<0.498>,7}}}
    
    2> erlang:port_info(Port).
    
    [{name,"efile"},
    
    {links,[<0.31.0>]},
    
    {id,498},
    
    {connected,<0.31.0>},
    
    {input,9},
    
    {output,11}]
    
    3> erlang:port_set_data(Port, abcdefg).
    
    true
    
    4>  erlang:port_get_data(Port).
    
    abcdefg

    注意: gen_tcp和gen_udp等的port_data已经被使用了.

    收工!
    (就是使用这个Port的空间保存东西,如果未set就get 那么返回的是undefine,保存的内容可以重新set,那么get就是获得最新的context)

    异步通信有一步是注册socket,就用到了这个port存储。

    本文转自:~~~

  • 相关阅读:
    pycharm 对mysql的可视化操作
    pycharm连接linux创建django工程
    linux上安装pycharm
    pycharm激活码
    Windows下安装pip
    migrate设置
    python相对目录的基本用法(一)
    pycharm设置连接github
    在shell终端操作oracle数据库的常用命令
    在windows中把一个文件夹打成war包
  • 原文地址:https://www.cnblogs.com/labi/p/3583284.html
Copyright © 2011-2022 走看看