[#32727] require "./xxx" の「カレントディレクトリ」の意味 — Take_tk <ggb03124@...>

あるディレクトリαにあるスクリプトAに「require "./xxx"」と書いてあると、

21 messages 2001/12/03
[#32733] Re: require "./xxx" の「カレントディレクトリ」の意味 — matz@... (Yukihiro Matsumoto) 2001/12/03

まつもと ゆきひろです

[#32746] Re: require "./xxx" の「カレントディレクトリ」の意味 — Tanaka Akira <akr@...17n.org> 2001/12/04

In article <1007384829.854960.10474.nullmailer@ev.netlab.jp>,

[#32749] Re: require "./xxx" の「カレントディレクトリ」の意味 — Take_tk <ggb03124@...> 2001/12/04

たけ(tk)です。

[#32772] newdate — tadf@...

ふなばです。

108 messages 2001/12/04
[#32850] Re: newdate — Tanaka Akira <akr@...17n.org> 2001/12/10

In article <20011204234521G.tadf@kt.rim.or.jp>,

[#32855] Re: newdate — tadf@... 2001/12/10

ふなばです。

[#32859] Re: newdate — matz@... (Yukihiro Matsumoto) 2001/12/10

まつもと ゆきひろです

[#32860] Re: newdate — tadf@... 2001/12/10

ふなばです。

[#32889] Re: newdate — Tanaka Akira <akr@...17n.org> 2001/12/12

In article <20011210180612F.tadf@funaba.org>,

[#34281] Re: newdate — tadf@... 2002/03/10

ふなばです。

[#33661] when.exe の Ruby 化 (Re: newdate) — Takashi SUGA <suchowan@...> 2002/01/29

すいません。件名が変だったので、再送します。コメントをくださる方は、

[#32797] dir_config (mkmf.rb) のオプション指定の優先順位 — tamra@...

12 messages 2001/12/05
[#32798] Re: dir_config (mkmf.rb) のオプション指定の優先順位 — nobu.nakada@... 2001/12/06

なかだです。

[#32807] irb 0.8 release — keiju@... (Keiju ISHITSUKA)

けいじゅ@日本ラショナルソフトウェアです.

21 messages 2001/12/07
[#32808] Re: irb 0.8 release — rubikitch <rubikitch@...> 2001/12/07

From: keiju@rational.com (Keiju ISHITSUKA)

[#32935] Ruby256 倍本 " 界道編 " — shukaku@...

23 messages 2001/12/15
[#32963] Re: Ruby256 倍本 " 界道編 " — Shin-ichiro HARA <sinara@...> 2001/12/19

原です。

[#33014] "Walrus" on LinuxJapan — Taku Nakajima <tnakajima@...>

中島@ブレーンです。

13 messages 2001/12/24

[#33050] cgi.rb で cookie の encoding について — Beyond <beyond@...>

74 messages 2001/12/28
[#33054] Re: cgi.rb で cookie の encoding について — "U.Nakamura" <usa@...> 2001/12/28

こんにちは、なかむら(う)です。

[#33057] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33059] Re: cgi.rb で cookie の encoding について — nobu.nakada@... 2001/12/28

なかだです。

[#33060] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33063] Re: cgi.rb で cookie の encoding について — nobu.nakada@... 2001/12/28

なかだです。

[#33065] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33062] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/28

青山です。

[#33075] Re: cgi.rb で cookie の encoding について — Takahiro Kambe <taca@...> 2001/12/28

In message <20011228054515.726.qmail@localhost>

[#33078] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33083] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/28

青山です。

[#33090] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/28

[#33105] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/29

青山です。

[#33120] Re: cgi.rb で cookie の encoding について — Tanaka Akira <akr@...17n.org> 2001/12/30

In article <20011229013722.1869.qmail@localhost>,

[#33124] Re: cgi.rb で cookie の encoding について — Wakou Aoyama <wakou@...> 2001/12/30

青山です。

[#33131] Re: cgi.rb で cookie の encoding について — Beyond <beyond@...> 2001/12/31

[ruby-list:33092] Re: irbsh の rehash が遅い

From: Koji Arai <JCA02266@...>
Date: 2001-12-28 18:38:50 UTC
List: ruby-list #33092
新井です。

In message "[ruby-list:33086] Re: irbsh のrehash が遅い"
  on 29 Dec 2001 01:05:04 +0900,
  nobu.nakada@nifty.ne.jp wrote:
> なかだです。
> 
> At Sat, 29 Dec 2001 00:35:46 +0900,
> rubikitch <rubikitch@ruby-lang.org> wrote:
> > > #!で始まるファイルは実行可能と見なされます。
> > あ、なるほど。
> > これでは遅くなりますね。
> > いちいちファイルの内容を読んでいるのですから。
> 
> 環境変数でNTFSのアクセス権を使う設定もできたはずですが、忘れま
> した。

Cygwin の stat が遅いのは、stat(2) が様々な情報を一度に返す
システムコールであるせいでした(UNIX Magazine 2001.5 の連載
「Inside Cygwin」より)。今回の場合、st_mode メンバの情報だけ
が欲しいのに、他の st_nlink やらなんやら使いもしない情報を 
Cygwin ではエミュレーションする処理が必要になってしまいます。
これがかなり効いて来るようです。

で、実行可能かどうかだけを判断するならもしかすると access(2) 
を使うと少しはマシになるかもしれません。Cygwin のソースを見
ると ntsec でなければ結局 stat が使われるようではありますし、
また、るびきちさんの要件を満たすには、ディレクトリかどうかの
判断も必要なので access だけでは結局不十分ですが。

・・・ちょっと興味深かったのでためしてみました。添付の拡張ラ
イブラリを make して test_access.rb を実行すると以下のような
結果でした。

# 即興でやったもので、ruby のバージョンやらなんやらは揃えて
# ないですが

* Cygwin (ntsec)

654
654
0.641   <- (1) access を使った場合の /usr/bin 配下のチェック時間
5.428   <- (2) stat を使った場合の /usr/bin 配下のチェック時間

* Cygwin (ntsec なし)

653
653
13.76    <- (1)
14.911   <- (2)

* Linux

704
704
0.076084   <- (1)
0.080063   <- (2)

--
新井康司 (Koji Arai)

Attachments (3)

access.c (1.08 KB, text/x-csrc)
#include <unistd.h>
#include "ruby.h"

#ifndef SafeStringValue
# define SafeStringValue Check_SafeStr
#endif

VALUE
rb_f_access(VALUE obj, VALUE vpath, VALUE vmode)
{
    int mode;

    SafeStringValue(vpath);

    if (FIXNUM_P(vmode))
	mode = FIX2INT(vmode);
    else if (NIL_P(vmode)) {
	mode = 0;
    }
    else {
	char *p;
	mode = 0;
	SafeStringValue(vmode);
	p = RSTRING(vmode)->ptr;
	while (*p) {
	    switch (*p) {
	    case 'r': mode |= R_OK; break;
	    case 'w': mode |= W_OK; break;
	    case 'x': mode |= X_OK; break;
	    }
	    p++;
	}
    }

    if (access(RSTRING(vpath)->ptr, mode) == -1)
	rb_sys_fail(0);

    return 0;
}

void
Init_access()
{
    VALUE rb_cFile, rb_mFConst;

    rb_define_global_function("access", rb_f_access, 2);

    rb_cFile = rb_const_get(rb_mKernel, rb_intern("File"));
    rb_mFConst = rb_const_get(rb_cFile, rb_intern("Constants"));
    rb_define_const(rb_mFConst, "F_OK", INT2FIX(F_OK));
    rb_define_const(rb_mFConst, "R_OK", INT2FIX(R_OK));
    rb_define_const(rb_mFConst, "W_OK", INT2FIX(W_OK));
    rb_define_const(rb_mFConst, "X_OK", INT2FIX(X_OK));
}
extconf.rb (41 Bytes, text/x-ruby)
require 'mkmf'
create_makefile("access")
test_access.rb (351 Bytes, text/x-ruby)
require 'access'

dir = "/usr/bin"
n1 = n2 = 0
t1 = Time.now

Dir.foreach(dir) {|file|
    path = File.join(dir, file)
    access(path, File::X_OK) rescue next

    n1 += 1
}

t2 = Time.now

Dir.foreach(dir) {|file|
    path = File.join(dir, file)
    next unless FileTest.executable?(path)

    n2 += 1
}

t3 = Time.now

p n1, n2
p t2 - t1
p t3 - t2

In This Thread