나는 현재 실행중인 테스트에서 어떤 일이 벌어지고 있는지 이해하려고 애쓰고 있습니다. Test는 동일한 시스템에서 실행되는 두 개의 쉘 스크립트입니다.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
그래서 내가 A/ext3_dir를 실행 한 후 실행 B/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 사양.
누구든지이 문제에 관해 밝힐 수 있습니까? 테스트가 유효합니까? 내가 움직이고있는 파일에 대한 추가 링크를 만드는 것이 이동 대상에서 읽을 수있는 능력에 영향을 주어야하는 이유가 무엇인지 알 수 없습니다.
말한해야 :이 ext3 파일 시스템 (2.6.18) –