우리가 사용 echo 1234 >> some-file
한다면 Documentation은 출력이 추가되었다고 말합니다.
내 생각에 일부 파일이 존재하지 않으면 O_CREAT가 새 파일을 만듭니다. 사용 된 경우 >
O_TRUNC는 기존 파일을 자릅니다.
다음과 같은 경우 >>
: 파일을 O_WRONLY (또는 O_RDWR)로 열고 O_APPEND를 시뮬레이션하여 종료 및 쓰기 작업을 수행하려고합니까? 아니면 파일이 O_APPEND로 열리면서 추가되도록 커널에 남겨 둘 것입니까?
conserver 프로세스가 echo에 의해 삽입 된 일부 마커를 덮어 쓰기 때문에 출력 파일이 NFS 마운트 포인트에서 왔을 때 NFS 문서에서 O_APPEND가 서버에서 지원되지 않으므로 클라이언트 커널이 처리해야하기 때문에 이것을 묻습니다. conserver 프로세스가 O_APPEND를 사용하고 있지만 >>
리눅스에서 bash 를 확신하지 못 하므로 여기에 질문을합니다.
O_APPEND
는 지원되지 않습니다. 문제는 에뮬레이트된다는 것입니다. 로컬 파일 시스템에서 열린 동일한 파일에 쓰는 여러 프로세스O_APPEND
는 서로의 데이터를 덮어 쓰지 않습니다. NFS에서는O_APPEND
쓰기 전에 끝까지 검색하여 에뮬레이션되므로 경쟁 조건이 발생할 수 있습니다. NFS에서는이 문제를 해결할 방법이 없습니다. 각 병렬 작성기는 자체 파일을 작성해야합니다. 이 문제를 해결하는 유일한 방법은 NFS 서버에서 서버 프로세스를 설정하고 로거가로 그인하도록|nc server port
하고 서버가 들어오는 데이터를 로그에 추가하도록하는 것입니다.