- PR -

同じファイルに対して複数の端末から echo "Hello!" >> test.txt を行うとどうなりますか?

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2003-12-03 09:27
 お世話になっております。
同じファイルに対して複数の端末から echo "Hello!" >> test.txt を行うとどうなりますでしょうか。やってみたのですが、微妙にタイミングがずれているのかずれていないのかがわからないので判断できませんでした。

$cat test.txt
Hello! (←1台目のマシンが書き込んだやつ)
Hello! (←2台目のマシンが書き込んだやつ)

となるのですが、本当に同時に書き込まれた場合、理論的にはどうなるのでしょうか。ご教授願います。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-12-03 09:37
シェルの実装依存です。ただしwrite システムコールが割り込まれることは無いので、
この程度の文字数なら混ざり合うことは無いでしょう。
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2003-12-03 10:06
早速のご回答ありがとうございます。
ということは一人が書き込んでいる間にロックがかかってエラーが起こるとかいうことはないということでよろしいのでしょうか。。
Keisuke
大ベテラン
会議室デビュー日: 2003/10/24
投稿数: 105
投稿日時: 2003-12-03 22:33
これまた実装依存なのですが、ファイルロックをするシェルは記憶にないです。
また write が呼ばれても実際にディスクへの書き込みは起こらず瞬時に戻るため、
他のプロセスとかち合う確立は低いでしょう。
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2003-12-04 01:17
蛇足ですが。

組み込みechoがロックを取得するようになっているシェルは
まず無いだろうと思います。
ロックを行わなくても混ざらないのは、ひとつにはKeisukeさんが書かれている、
「この程度の文字数なら」ということです。
もうひとつ可能性があるのは(Keisukeさんが「シェルの実装依存です」と
書かれたのはこのことだと思いますが)アトミック操作で書き込みを
行っている、という場合です。そこまではやってないことが多いんじゃないか
という気がしますが。
(あ、べつにプログラムに特に手間がかかるというわけじゃないです)

このあたりに興味がおありなら、『詳解UNIXプログラミング』を読まれるのが
よいかと。(アトミックな書き込みについては第3章)

[ メッセージ編集済み 編集者: ぽんす 編集日時 2003-12-04 01:35 ]
ぽんす
ぬし
会議室デビュー日: 2003/05/21
投稿数: 1023
投稿日時: 2003-12-04 08:16
おっと。
引用:

アトミック操作で書き込みを
行っている、という場合です。


という以前に、たとえばputsで書くか(これだと echo -n で問題ですが)
putcで書くかとか、その他いろいろ違いが出るところがあるですな。
1

スキルアップ/キャリアアップ(JOB@IT)