open_port function problem.

Joachim Durchholz joachim.durchholz@REDACTED
Fri Dec 19 09:50:40 CET 2003


Chenniappan,Dhanasekaran [DBA] wrote:
> hai, 
> 
>   we are working on erlang port communication program which communicate with
> c .exe . for that we use open_port like
> "open_port({spawn, ExtPrg}, [{packet, 2}]),"
> 
> our problem is when we are sending number 26 through that port the port get
> closed.what may be possibly wrong with this. and when we give 10 through
> buffer it always prints we assume that it may be due to ascii property of 10
> & 13 which is new line and cairrage return respectively, but how can these
> things be handled effectively,there is no clue regarding the port close when
> sending 26. Evenn the example foo also reflect the same resullt. Please give
> us an solution in this problem.

You're probably working on a Windows system, and the port got opened in 
text mode.
Under Windows, text mode file handles will interpret code 10 (newline) 
as line end (and store the bytes 13 and 10, carriage return and newline, 
to establish conformance with Windows conventions). Code 26 is 
Control-Z, which means end-of-file (this is a really ancient convention 
but kept for compatibility).

To get rid of these effects, open the port in "binary" mode; in this 
mode, no translation takes place.

Text mode interpretation may happen both on the sending and receiving 
end of the pipe. IOW you should not only check the Erlang side of 
things, but also the C side.
Actually, when I think of it, it's most likely that you're just using 
the stdin handle in the C program, which is always opened in text mode 
for you; you have to change its mode (not sure how to do this, you're 
probably in for an extensive search in MSDN).

Keep us posted on results, this might be an interesting information 
snippet to be added to the Erlang documentation :-)

HTH
Jo




More information about the erlang-questions mailing list