fwrite/format on sockets?

Martin Bjorklund mbj@REDACTED
Sat Aug 26 12:35:54 CEST 2000


Torbjorn Tornkvist <tobbe@REDACTED> wrote:
> 
> > It seems like calling fwrite/format on a socket fails with badarg. Is there
> > a way to do something like this? 
> 
> Use: gen_tcp:send/2 for this.
> 
> > If sockets are not IODevices usable by
> > fwrite, is there an equiviland to Common Lisp's (format nil "Format
> > string")? (Ie return the string which would normally be printed instead of
> > printing it).
> 
> Use: io_lib:format/2 as shown in the example below:
> 
> 1> lists:flatten(io_lib:format("hello ~s~n",["world"])).
> "hello world\n"

But note that gen_tcp:send/2 does not need a flattened list.  In this
case you can save some performance by sending the result from
io_lib:format/2 directly to gen_tcp:send/2.  Also, in many cases you
might not even have to call io_lib:format/2, but instead write code
like this:

   gen_tcp:send(Sock, [String, ": ", integer_to_list(Integer)])

and so on.

(This is actually true for all ports.  If you find yourself using
lists:flatten a lot, think again!)


/martin



More information about the erlang-questions mailing list