truncateやflockやsymlinkのサポート状態。

[上に] [前に] [次に]
ふじもと [E-Mail] 2000/03/08(水) 19:43:37
タイトルに書いたようなコマンドってサポートされてないときがあるって
書いてありますが、セットで使えないんですか?
それともこれはいいけどこれはだめとかなんですか?

もし
open (FILE, "+<XXX.txt");
eval { truncate (FILE, 0);};
if (|@){
    warn "WARNING: not supported.\n";
}
seek (FILE, 0 ,0);
で書き込みをはじめたときに、もしtruncateがサポートされてないと
どういうふうに書き込みが始まるのでしょうか?
ファイルの頭に付け足されていくのでしょうか?

さむそん 2000/03/08(水) 20:25:08
flockがWin32で使えないのは知ってるけど、
seekやtruncateが使えないプラットフォームの
存在は聞いたことがない。

Ichi 2000/03/09(木) 06:09:32
サポートされていない以上、動作の保証は無いと思いますが、
何も処理されないと思いますので、ファイルの末尾に追加されて
行くのではないかと思います。

ちなみに、排他制御しないのなら、
>open (FILE, "+<XXX.txt");
>eval { truncate (FILE, 0);};

open(FILE, ">XXX.txt);
で十分です。

ラウォッチ 2000/03/09(木) 09:09:06
>seekやtruncateが使えないプラットフォームの存在は聞いたことがない。

私の本には、
flockはWin32とMacがNG。
symlinkはWin32がNG。
truncateはノーNGです。

びーだま [E-Mail] 2000/03/09(木) 15:34:45
ちなみに、

flock() は、Win32, Mac でなくとも、使えない場合はありますね。
たとえば、UNIXでも、ファイルサーバが、nfs マウントなどで、CPU
が別に動いている時とかです。

一般的なWEBユーザーでも大型プロバイダーなどでは、サーバー構成が
こうなっている場合が多いので、ローカル環境でOSも同じ、WEBサーバ
も同じ種類手近いシステムを構築して、実験しているから大丈夫とたかを
括って気づかずにつかうと、本番運用でコケますね。

truncate についてですが「らくだ本」などには、あえて
「使えないシステムでは」と別例が書かれていますね。
実際どんな環境で使えないのかは知りませんが・・・

ふじもと 2000/03/09(木) 20:21:01
みなさんありがとうございます。

>open(FILE, ">XXX.txt);
>で十分です。

しかし、flockを使うときにこれでオープンしてしまうとまずいってとほほさんが言ってたような。
flockをする前に書き込みファイルを0にしてしまうのでその間にファイルを読み込まれるとまずいとか。。。
私の理解の仕方が違うのでしょうか?

truncateが使えることは理解しました。

Ichi 2000/03/10(金) 05:25:40
>ちなみに、排他制御しないのなら、
この部分が重要でして...
例えばローカルで動かし、ローカルのファイルを扱う場合です。

ふじもと 2000/03/11(土) 10:19:37
>>ちなみに、排他制御しないのなら、

ローカルでローカルのファイルを扱うとは?
ちょっと解らないです。すみません。知識があまりないので。
スタンドアローンってことですか?

Ichi 2000/03/12(日) 07:32:17
>ローカル...スタンドアローンってことですか
ネットワークコンピュータに対して、ローカルコンピュータということです。
# 間違ってるかも...
つまり、自分のコンピュータです。

ファイルが同時にいくつかのプロセスから開かれない(シングルタスクのOS上)
なら、排他制御しなくていいということです。
(途中で気がつきましたが、マルチタスクのOS上なら、排他制御
しないとまずいです)

ふじもと 2000/03/12(日) 12:32:21
[[解決]]
なんとなく解りました。
よーするに、ネットワークコンピュータで多数の人がアクセスするようなCGIみたいのを
動かすときは、排他制御しないとだめということですよね。

いろいろとお手数おかけしました。

[上に] [前に] [次に]