🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: fj.editor.emacs
5 messages
5 total messages Started by Yasushi Shinjo Mon, 07 May 2007 12:06
Emacs Interlocking mechanism
#592
Author: Yasushi Shinjo
Date: Mon, 07 May 2007 12:06
13 lines
1323 bytes
$B?7>k!wC^GHBg3X>pJs$G$9!#$3$s$K$A$O!#(B

Emacs $B$K$O!"J#?t$N(B Emacs $B$GF1$8%U%!%$%k$rJT=8$7$h$&$H$7$?7Y(B
$B9p$r=P$95!G=$,$"$j$^$9$h$M!#$"$l$O!"$I$&$$$&;E3]$1$K$J$C$F$$(B
$B$^$7$?$C$1!)(B

$B$I$3$+$N%G%#%l%/%H%j$K%m%C%/%U%!%$%k$,CV$+$l$F$$$?$H;W$C$?$N(B
$B$G$9$,!"8+$D$+$j$^$;$s!#(B

$B@bL@$O!"(BM-x info $B$N(B Emacs $B$N(B Interlocking $B$K$"$j$^$9!#(B

$B!@!@!!?7>k!!Lw!!!J$7$s$8$g$&!!$d$9$7!K!!!@!@(B
$B!@!@!!C^GHBg3X!!EE;R!&>pJs!!!!!!!!!!!!!!!@!@(B
Re: Emacs Interlocking mechanism
#593
Author: NAKAJI Hiroyuki
Date: Mon, 07 May 2007 16:15
33 lines
2127 bytes
中治@鳥取です。

>>>>> In <YAS.07May7210618@kirk.is.tsukuba.ac.jp> 
>>>>>	yas@is.tsukuba.ac.jp (Yasushi Shinjo) wrote:

> Emacs には、複数の Emacs で同じファイルを編集しようとした警
> 告を出す機能がありますよね。あれは、どういう仕掛けになってい
> ましたっけ?

詳しくは解読できませんが、src/filelock.c にそれらしいものがあるように
見えます。

> どこかのディレクトリにロックファイルが置かれていたと思ったの
> ですが、見つかりません。

lock_file_1() に、

  if (boot_time)
    sprintf (lock_info_str, "%s@%s.%lu:%lu", user_name, host_name,
	     (unsigned long) getpid (), (unsigned long) boot_time);
  else
    sprintf (lock_info_str, "%s@%s.%lu", user_name, host_name,
	     (unsigned long) getpid ());

  err = symlink (lock_info_str, lfname);

なんてのがあるので、そうかなと思いました。

> 説明は、M-x info の Emacs の Interlocking にあります。

その説明文にある file-locked を grep で探してみました。
-- 
NAKAJI Hiroyuki (中治 弘行)
Re: Emacs Interlocking mechanism
#594
Author: Katsumi Yamaoka
Date: Tue, 08 May 2007 03:24
21 lines
1762 bytes
動作はよくわかりませんが。

>>>>> In <YAS.07May7210618@kirk.is.tsukuba.ac.jp> 新城さん wrote:

>> どこかのディレクトリにロックファイルが置かれていたと思ったの
>> ですが、見つかりません。

UNIX 系の環境で例えば  FILE の編集を始めると、Emacs 20 以上では
同じディレクトリに

.#FILE -> user@host.pid:number

という symlink ができます。これがそうですね。user@host... という
ファイルはありません。ディレクトリが ro だとできないので、ロック
もかかりません。XEmacs 21.* も同様です。

Emacs 19 では /usr/local/lib/emacs/lock/ のような場所にロックファ
イルができるようなのですが、確認できませんでした。Windows では、
たぶん違うんでしょうね。
-- 
山岡
Re: Emacs Interlocking mechanism
#595
Author: Yasushi Shinjo
Date: Tue, 08 May 2007 09:47
53 lines
3214 bytes
$B?7>k!wC^GHBg3X>pJs$G$9!#$3$s$K$A$O!#(B

In article <b4mwszkvvyk.fsf@jpl.org>
	Katsumi Yamaoka <yamaoka@jpl.org> writes:
> >> $B$I$3$+$N%G%#%l%/%H%j$K%m%C%/%U%!%$%k$,CV$+$l$F$$$?$H;W$C$?$N(B
> >> $B$G$9$,!"8+$D$+$j$^$;$s!#(B
> UNIX $B7O$N4D6-$GNc$($P(B  FILE $B$NJT=8$r;O$a$k$H!"(BEmacs 20 $B0J>e$G$O(B
> $BF1$8%G%#%l%/%H%j$K(B
> .#FILE -> user@host.pid:number
> $B$H$$$&(B symlink $B$,$G$-$^$9!#$3$l$,$=$&$G$9$M!#(B

$B>pJs$"$j$,$H$&$4$6$$$^$9!#F1$8%G%#%l%/%H%j$G$7$?$+!#(B19 $B$NOC(B
$B$,>/$7$"$C$?$N$G!"JL$N%G%#%l%/%H%j$+$H;W$C$F$$$?$N$G$9$1$l$I!#(B

> Emacs 19 $B$G$O(B /usr/local/lib/emacs/lock/ $B$N$h$&$J>l=j$K%m%C%/%U%!(B
> $B%$%k$,$G$-$k$h$&$J$N$G$9$,!"3NG'$G$-$^$;$s$G$7$?!#(BWindows $B$G$O!"(B
> $B$?$V$s0c$&$s$G$7$g$&$M!#(B

$B$&$A$N(B Emacs 19.34 (Mule 2.3 (SUETSUMUHANA)) $B$@$H(B
/usr/local/com/emacs/lock/ $B$K%U%!%$%k$,:n$i$l$F$$$^$7$?!#$@(B
$B$$$VN/$C$F$$$k$J$"!#(B

------------------------------------------------------------
% ls -ld /usr/local/com/emacs/lock/
drwxrwxrwx   2 root         9216 May  8 17:24 /usr/local/com/emacs/lock/
% ls  /usr/local/com/emacs/lock/|wc
     163     163    6908
% ls -lt /usr/local/com/emacs/lock/ | head -2
total 163
-rw-rw-rw-   1 yas             5 May  5 22:42 !home!hlla!yas!.newsrc.el
% 
------------------------------------------------------------

In article <866474ehj7.fsf@ra333.heimat.gr.jp>
	NAKAJI Hiroyuki <nakaji@kankyo-u.ac.jp> writes:
> $BCf<#!wD;<h$G$9!#(B
> lock_file_1() $B$K!"(B
>   if (boot_time)
>     sprintf (lock_info_str, "%s@%s.%lu:%lu", user_name, host_name,
> 	     (unsigned long) getpid (), (unsigned long) boot_time);
>   else
>     sprintf (lock_info_str, "%s@%s.%lu", user_name, host_name,
> 	     (unsigned long) getpid ());
>   err = symlink (lock_info_str, lfname);
> $B$J$s$F$N$,$"$k$N$G!"$=$&$+$J$H;W$$$^$7$?!#(B

C$B8@8l$N=j$G$7$?$+!#(BEmacs Lisp $B$O!"C5$7$?$s$@$1$l$I!#(B
lname $B$N>l=j$,F1$8%G%#%l%/%H%j$M!#(B

$B4X78$J$$$G$9$,!"(Bsprintf() $B4m$J$=$&!#(B

$B!@!@!!?7>k!!Lw!!!J$7$s$8$g$&!!$d$9$7!K!!!@!@(B
$B!@!@!!C^GHBg3X!!EE;R!&>pJs!!!!!!!!!!!!!!!@!@(B
Re: Emacs Interlocking mechanism
#596
Author: NAKAJI Hiroyuki
Date: Tue, 08 May 2007 13:52
31 lines
2316 bytes
中治@鳥取です。

>>>>> In <YAS.07May8184743@kirk.is.tsukuba.ac.jp> 
>>>>>	yas@is.tsukuba.ac.jp (Yasushi Shinjo) wrote:

> > lock_file_1() に、
> >   if (boot_time)
> >     sprintf (lock_info_str, "%s@%s.%lu:%lu", user_name, host_name,
> > 	     (unsigned long) getpid (), (unsigned long) boot_time);
> >   else
> >     sprintf (lock_info_str, "%s@%s.%lu", user_name, host_name,
> > 	     (unsigned long) getpid ());
> >   err = symlink (lock_info_str, lfname);
> > なんてのがあるので、そうかなと思いました。

> C言語の所でしたか。Emacs Lisp は、探したんだけれど。
> lname の場所が同じディレクトリね。

> 関係ないですが、sprintf() 危なそう。

この前に、

  lock_info_str = (char *)alloca (strlen (user_name) + strlen (host_name)
				  + LOCK_PID_MAX + 30);

で lock_info_str の領域を確保しているので、長さを超える文字列を突っ込
まれてどうこうという心配はないんではないかと思いたいです。

## 「危なそう」のココロをよくわかっていませんが。
-- 
NAKAJI Hiroyuki (中治 弘行)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads