[erlang-questions] open_port() on FD 0,1 problems

Dmitry Belyaev rumata-estor@REDACTED
Wed Aug 11 09:29:16 CEST 2010


You can try to change file mode from text to binary.

Dmitry Belyaev


On 08/10/2010 08:44 PM, Daniel Goertzen wrote:
> Thanks!  That helps a lot.
>
> New issue is that erl.exe is translating incoming 0x0d bytes to 0x0a.
>   Windows line-end conversions, grumble, grumble.  Is there a nice way to
> turn that off?  Or am I at a dead-end?
>
> Thanks,
> Dan.
>
> On Tue, Aug 10, 2010 at 9:05 AM, Hynek Vychodil<hynek@REDACTED>  wrote:
>
>    
>> I don't know how on Windows but try -noinput parameter.
>>
>> On Tue, Aug 10, 2010 at 3:39 PM, Daniel Goertzen
>> <daniel.goertzen@REDACTED>  wrote:
>>      
>>> I am trying to operate an Erlang Port for stdin and stdout
>>> [open_port({fd,0,1}...].  The program below is to receive two integers,
>>> multiply them, and write the result. Every other request vanishes without
>>>        
>> a
>>      
>>> reply, and I don't know why.  Details:
>>>
>>> - Windows 7 64 bit.
>>> - Erlang launched with "-noshell -s erlang_rpc_benchmark"
>>> - I have to wait a moment after launching erlang before sending it data,
>>>        
>> or
>>      
>>> I definitely get dataloss.
>>> - Exactly every other packet gets lost, starting with the first one.
>>> - The byte counters on Task Manager show that the request is getting to
>>> erl.exe, but not to my code.
>>> - I've added debug code to verify that there are no other messages
>>>        
>> appearing
>>      
>>> at my receive expression (not currently in code below).
>>> - I wrote a Python version of this program, and it worked without issue.
>>>
>>>
>>> Background:  I plan to write a Python GUI program with an Erlang child
>>> process.  The test program below is to assess Python->Erlang messaging
>>> performance.  I am open to other IPC approaches if there is something
>>> better.
>>>
>>> Thanks,
>>> Dan.
>>>
>>>
>>> -module(erlang_rpc_benchmark).
>>> -export([start/0, std_server/0]).
>>>
>>> start() ->
>>>   spawn(fun std_server/0).
>>>
>>> std_server() ->
>>>   Port = open_port( {fd,0,1}, [{packet, 4}, binary ] ),
>>>   loop(Port).
>>>
>>> loop(Port) ->
>>>   receive
>>>     {Port, { data,<<A:32,B:32>>  }} ->
>>>       Result = A*B,
>>>       Port ! {self(), {command,<<Result:32>>}};
>>>   end,
>>>   loop(Port).
>>>
>>>        
>>
>>
>> --
>> --Hynek (Pichi) Vychodil
>>
>> Analyze your data in minutes. Share your insights instantly. Thrill
>> your boss.  Be a data hero!
>> Try GoodData now for free: www.gooddata.com
>>
>>      
>
>
>    


More information about the erlang-questions mailing list