문서에 man lseek
따르면,
O_APPEND
열린 파일 설명에 파일 상태 플래그가 설정된 경우 는write(2)
여부에 관계없이 항상 파일 오프셋을 파일 끝으로 이동합니다lseek()
.
파일 오프셋이 호출 전이나 후에 끝으로 이동되는지는 알려주지 않습니다 write(2)
.
파일 이 열려 있는 동안 맨 위로 O_APPEND
이동하여 파일을 다시 쓸 수 있습니까 lseek
?
답변1
파일 이 열려 있는 동안 맨 위로
O_APPEND
이동하여 파일을 다시 쓸 수 있습니까lseek
?
아니요.
~에 따르면POSIX 문서write()
:
파일 상태 플래그의 O_APPEND 플래그가 설정된 경우 각 쓰기 전에 파일 오프셋을 파일 끝으로 설정해야 하며, 파일 오프셋 변경과 쓰기 작업 사이에 중간 파일 수정 작업이 발생해서는 안 됩니다.
너할 수 있는그러나 다음을 사용하십시오 pwrite()
.
이 함수는 지정된 위치에 쓰고 파일 오프셋( 설정 여부에 관계없이) 을 변경하지 않는다는 점을 제외
pwrite()
하고 와 동일해야 합니다 . 의 처음 세 인수는 파일 내의 원하는 위치에 오프셋을 추가하는 네 번째 인수와 동일합니다 . ...write()
O_APPEND
pwrite()
write()
오프셋을 직접 관리하면 됩니다.
안타깝게도,pwrite()
Linux에서 깨짐:
POSIX에서는
O_APPEND
이 플래그를 사용하여 파일을 열 때pwrite()
데이터가 기록되는 위치에 영향을 주지 않아야 합니다. 그러나 Linux에서는 를 사용하여 파일을 열면O_APPEND
의pwrite()
값에 관계없이 데이터가 파일 끝에 추가됩니다offset
.
따라서 Linux에서는 이를 다시 작성할 수 있는 방법이 없습니다 O_APPEND
.
답변2
아니요, 이 파일을 다시 쓸 수 없습니다. 각 파일을 실행하기 전에 write
파일 오프셋을 끝으로 설정하십시오.