[erlang-questions] open_pipe({spawn, "cat"}) --- how to close stdin of cat?

Michael Truog <>
Sun Mar 1 11:18:14 CET 2009


You normally never try to close stdin on the port.  You can close stdin 
on the port by calling erlang:port_close/1 but you won't be able to 
receive on the port after you close it.  You should be able to use a 
read within the port program that does not depend on eof to terminate 
the data (see http://erlang.org/doc/tutorial/part_frame.html by the 
Ports section).

The documentation for erlang:open_port/2 is at 
http://erlang.org/doc/man/erlang.html .  The system commands without a 
module name are within the erlang module.  Consider using 
erlang:port_command/2 rather than using ! directly, for better behavior.

- Michael

C K Tan wrote:
> Hi all,
>
> I am tryinng to use port to open a program that reads until EOF from
> stdin, and then write results to stdout ... i.e. something like the
> unix wc command. I can't figure out how to close the stdin of the
> spawned process:
>
> wc(InputText) ->
>     P = open_port({spawn, "wc"}, [stream, exit_status, use_stdio,
>                             stderr_to_stdout, in, out, eof]),
>     P ! {self(), {command, "hello world"}},
>     P ! {self(), {eof}},   %% ERROR -- how to close stdin of the cat process?
>     receive {P, X} -> X end.
> 	
> Also, where can I find detailed documentation on open_port?
>
> Appreciate any help.
>
> Thanks,
> -cktan
> _______________________________________________
> erlang-questions mailing list
> 
> http://www.erlang.org/mailman/listinfo/erlang-questions
>
>   




More information about the erlang-questions mailing list