[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1755]Meadow 1.13 Beta 1 (TANAHASHI:61) release.



始末の悪い問題を踏みつけた感があります。
つまり、回答を出すために必要なだけの、明確なcriterionが
ない問題ですねぇ。

Shun-ichi GOTO <gotoh@xxxxxxxxxxx> writes:

> 後藤>                                                    というか、これらの 
> 後藤> file-{readable,writable,executable}-p<f> は UNIX のfile permission を取
> 後藤> 得したいという経緯から作られたモノなのだと想像するのに難くないですよね。
> 
> mit> う〜ん、難かったです。^^;

すくなくとも、(file-writable-p)をUNIXと、Windowsで完全に同一のsemanticsを
実現するのは不可能です。すなわち、directoryにwritable permissionというものが
存在しないためです。もちろん、NTでは、ACLをFileを含むObjectに持つことが
出来ますが、まあ、その話はおいておきましょう。

read only permissionがついていると、Windows/DOSでは、

Fileは、書き込み、変更、削除が不可能
Directoryは、削除のみが不可能。

のようなので、UNIXのwritable permissionとは、概念が異なっていて、
一部重なるところがあるところが悩ましいところですね。特にDirectoryは
かなり困った感じです。

fileでも、おかしなことがあって、UNIXでは、writable permissionがなくても
unlinkは(そのdirectoryにwritable permissionがあれば) できますが、
Windowsでは、read only permissionがついている場合は、RemoveFile()できません
から。細かいところで不整合がおきます。

そうすると、むしろ、file-writable-pの使用法から、どのような仕様に
するのが最も問題が少ないか、という感じがします。

> elisp 関数設計者の想定しない/意図しない使い方である可能性が大きいので
> はっきりさせておきたいな、と。

こういう理由がありますからね。

さて、file-writable-pをfileに対して適用する場合は、水戸さんの
仰られるとおり、

(if (file-writable-p file)
    (write-file file))

なんて使い方が考えられるわけで、まあ、これはかなり使用法が想定
出来そうです。

問題は、directoryに対して適用する場合です。

(file-writable-p dir) は、どんな用途に用いるか?

なのですが、UNIX上においても、

o ... そのdirectoryの中のファイル名を変更、ファイルを削除出来るか?

を知るために、(file-writable-p dir)を使うという本質的な用途と、
writable permissionのbitそのものを取得したい。(情報をユーザーに提供したい)
という2つの意味が細かく見るとあると思います。

前者の用途に対して、本質的な解を出すことが出来ないのは、
既に見たとおりです。そうすると、後者の目的を果たす程度の
意味として、directory自身のread only permissionを(file-writable-p)の
意味として返すのは、それほど悪い選択ではないと思います。

どちらにしろ、前者の要求を満たすことが出来ない以上、
permission自身の情報を得るためだけの意味として、(file-writable-p)を
生かすことが出来るというわけです。気持ちは悪いですが、
diredなどで、Directory自身のpermissionが見えるのは便利ですしね。

from himi