2012-03-02 6 views
2

私が実行しているテストで何が起こっているのか分かりにくいです。 Testは、同じマシン上で実行される2つのシェルスクリプトです。ext3のファイル名を変更してPOSIX仕様を破るように見える

A:

#!/bin/bash 
    touch target; 
    for ((i=0; i < 1000; i=i+1)); do 
     echo "snafu$i" > $1/file$i; 
     mv -f $1/file$i $1/target; 
    done; 

B:

#!/bin/bash 
    while(true);do 
     cat $1/target; 
    done 

だから私はB/ext3_dirを実行し、その後、A/ext3_dirを実行します>アウト(これだけのエラーが出てはstdに行きます)。

この「名前の変更」のPOSIX仕様に応じて、予想通り、すべてが正常に動作して:新しい引数で指定されたリンクが存在する場合は

、それが削除され、新しい名前に変更古いされなければなりません。この場合、newという名前のリンクは、名前変更操作を通じて他のプロセスに見えるようにし、操作の開始前にnewまたはoldで参照されるファイルを参照します。 - 一見に違反して

#!/bin/bash 
    touch target; 
    for ((i=0; i < 1000; i=i+1)); do 
     echo "snafu$i" > $1/file$i; 
     ln $1/file$i $1/link$i 
     mv -f $1/file$i $1/target; 
    done; 

私は読み出し側の「そのようなファイルまたはディレクトリ」エラーが出るん:私は移動を行う前に、一時ファイルへのハードリンクを追加する場合は

POSIX仕様。

誰でもこの動作を確認できますか?テストは有効ですか?移動するファイルへの余分なリンクを作成すると、移動先から読み取る機能に影響するはずです。

+0

は言っておく必要があります。これはext3ファイルシステム上でRHEL5(2.6.18) –

答えて

0

私はDebian上で実行しており、EXT3ファイルシステムで正常に動作しました。私はここではうまくいかないものは見ない。 最小限のスクリプトでテストするために、SHシェルのループを書き換えました。

とにかく
#!/bin/sh 
    touch target 
    for i in $(seq 1 999) do 
      echo "snafu$i" > $1/file$i; 
      ln $1/file$i $1/link$i 
      mv -f $1/file$i $1/target 
    done 

、そのtouch targettouch $1/targetすべきではありませんか?

+0

にありますか? –

+0

はい、ext3にあります。これは、VirtualboxゲストとしてのDebianストックです。私は答えを編集しました。 – karatedog

+0

チェックするだけで、同時に2番目のスクリプトを読み込んで実行したのですが、それは正しいでしょうか? –

関連する問題