Удаленная работа с файлами

45 views
Skip to first unread message

Dmitriy Kov

unread,
Nov 13, 2009, 4:19:37 AM11/13/09
to Erlang в России
Добрый лень. Помогите, пожалуйста, закрыть проблем в знаниях:
Есть два узла, a и b.
Запускаю:
erl -name a -setcookie abc
erl -name b -setcookie abc


(b...@debloc.lan)1> {ok,F} = rpc:call( a...@debloc.lan , file, open,["/home/
arhibot/test1.c",[read]]).
{ok,<6254.47.0>}
(b...@debloc.lan)2> rpc:call( a...@debloc.lan , io, get_line,
[F,'']).
{error,terminated}
(B...@debloc.lan)3>

Как правильно достигнуть желаемого результата?

Mikhail Kashkin

unread,
Nov 13, 2009, 6:03:33 AM11/13/09
to erlang-...@googlegroups.com
On Nov 13, 2009, at 12:19 PM, Dmitriy Kov wrote:

> Добрый лень.

Про лень похоже угадал :)

--
Mikhail Kashkin
http://www.devcult.ru/
http://www.mediavirus.ru/


Alexander Dergachev

unread,
Nov 13, 2009, 6:16:54 AM11/13/09
to erlang-...@googlegroups.com

Если мне не изменяет мой склероз,  открыв файл на одной ноде, и передав дескриптор на другую, можно работать с файлом на другой ноде как с "родным" :) поправьте меня,  если не прав.

/Regards,
Alexander Dergachev

--~--~---------~--~----~------------~-------~--~----~ Страница рассылки: http://groups.google.co...

Иван

unread,
Nov 13, 2009, 6:51:37 AM11/13/09
to Erlang в России
Совершенно верно. Для обычных файлов file:open в качестве дескриптора
возвращает pid(). Т.е. его можно использовать с любой ноды.

On Nov 13, 1:16 pm, Alexander Dergachev <cy6erbr...@gmail.com> wrote:
> Если мне не изменяет мой склероз,  открыв файл на одной ноде, и передав
> дескриптор на другую, можно работать с файлом на другой ноде как с "родным"
> :) поправьте меня,  если не прав.
>
> /Regards,
> Alexander Dergachev
>

> On Nov 13, 2009 2:03 PM, "Mikhail Kashkin" <mkash...@gmail.com> wrote:
>
> On Nov 13, 2009, at 12:19 PM, Dmitriy Kov wrote:
>
> > Добрый лень.
>
> Про лень похоже угадал :)
>
> --

> Mikhail Kashkinhttp://www.devcult.ru/http://www.mediavirus.ru/

Иван

unread,
Nov 13, 2009, 7:13:47 AM11/13/09
to Erlang в России
А ошибка возникает из-за того что процесс-дескриптор (IoDevice)
линкуется с вызывающим процессом. Если вызывающий процесс завершается,
IoDevice также закрывается. А в rpc:call все запросы выполняются в
erlang:spawn_monitor.

Dmitriy Kov

unread,
Nov 13, 2009, 8:24:16 AM11/13/09
to Erlang в России
Спасибо, все ясно. Решение нашлось в книге Армстронга:
-module(fileserv2).
-export([start/1,rpc/4]).
start(Node) ->
spawn(Node, fun() -> loop() end).

rpc(Pid, M, F, A) ->
Pid ! {rpc, self(), M, F, A},
receive
{Pid, Response} ->
Response
end.
loop() ->
receive
{rpc, Pid, M, F, A} ->
Pid ! {self(), (catch apply(M, F, A))},
loop()
end.

Reply all
Reply to author
Forward
0 new messages