J'ai besoin de mon application erlang pour lire et écrire dans un tube nommé.Comment lire/écrire depuis erlang vers un tube nommé?
L'ouverture du tube nommé en tant que fichier échouera avec eisdir
.
J'ai écrit le module suivant, mais il est fragile et se sent mal à bien des égards. En outre, il échoue à la lecture après un certain temps. Y a-t-il un moyen de le rendre plus ... élégant?
-module(port_forwarder).
-export([start/2, forwarder/2]).
-include("logger.hrl").
start(From, To)->
spawn(fun() -> forwarder(From, To) end).
forwarder(FromFile, ToFile) ->
To = open_port({spawn,"/bin/cat > " ++ ToFifo},
[binary, out, eof,{packet, 4}]),
From = open_port({spawn,"/bin/cat " ++ FromFifo},
[binary, in, eof, {packet, 4}]),
forwarder(From, To, nil).
forwarder(From, To, Pid) ->
receive
{Manager, {command, Bin}} ->
?ERROR("Sending : ~p", [Bin]),
To ! {self(), {command, Bin}},
forwarder(From, To, Manager);
{From ,{data,Data}} ->
Pid ! {self(), {data, Data}},
forwarder(From, To, Pid);
E ->
?ERROR("Quitting, first message not understood : ~p", [E])
end.
Comme vous l'avez peut-être remarqué, il imite le format du port dans ce qu'il accepte ou retourne. Je veux qu'il remplace un code C qui va lire les autres extrémités des tuyaux et être lancé depuis le débogueur.
Merci pour le pointeur. Je pourrais gratter. – cstar