How to change a C-Node written with ei to be a port program?

Shawn Pearce <>
Fri Mar 12 02:33:42 CET 2004


 wrote:
> > Set the port in binary mode and with a packet format of 3:
> > 
> > 	open_port({spawn, "myprogram"}, [binary, {packet, 3}])
> 
> I had to set {packet, 4}. With a packet length size of 3, I get a badarg in open_port/2.

Doh!  Fat fingers on my part hit the wrong key.  I was on my way out
the door and just fired off a reply without proofreading.  My apologies!

> > When you send/receive through it, use term_to_binary and binary_to_term
> > in Erlang:
> > 
> > 	port_send(Port, term_to_binary(Message)),
> > 
> > 	receive
> > 	{Port, {data, Data}} ->
> > 		Message = binary_to_term(Data)
> > 	end
> 
> I take it you meant port_command/2 to send something to the port.

Yes, I did.  Again, lack of proofreading on my part.

> One question that I wasn't sure of: Should I be choosing the
> port_command/2 and port_close/1 functions over the direct message
> sending?  The manual definitely suggests using the port_...
> functions, so I'm going with that for now.

Yes, in new code.  The BIFs are a little bit clearer than the message
is...  though some may disagree.

> I also have problems with recognising the demise of the port program.
> If I start it using the exit_status option, I get correct notification
> if I kill the program from the outside, but not if I do an exit(1)
> inside it (it's an unstable program ;).  Not a big deal though.

What OS is this on?  I haven't fully tested exit_status, but it does
seem to work most of the time.  You might want to also try eof, it
may report eof when it dies.

-- 
Shawn.

  Talk is cheap because supply always exceeds demand.



More information about the erlang-questions mailing list