open()
파일 로가는 방법이 있습니까? 물론, 그것들을 추가 모드로 열거 나 끝까지 찾아서 자라도록 할 수 있습니다. 그러나 내가 아는 한 일반적인 유닉스 스타일 시스템 호출 인터페이스를 통해 파일을 축소하는 방법은 없습니다.
내가 아는 한, 그렇게하는 유일한 방법은 더 짧은 파일을 새로 만들어 rename()
이전 파일 대신 만들어내는 것입니다.
방금 확인을 원했습니다. 새 파일을 만들고 이름을 바꾸는 과정을 거치지 않고 파일에서 직접 작업 한 파일 편집기를 만들 수 있음을 암시하는 대답을 보았 기 때문에 확인을 원했습니다.
필자는 항상 libc 및 유닉스 스타일 시스템 호출 인터페이스의 파일 API가 파일 시스템을 쉽게 구현하고 조각화에 기여할 수있는 사용 패턴을 피하기 위해 파일 축소를 허용하지 않았다고 생각했습니다.
open()
그리고 openat()
이미 절단에 대한 플래그를 가지고 O_TRUNC
즉, 완전히 수축 - - 아이 노드를 변경하지 않고 너무 기술적으로는 파일을 축소하는 원인 않습니다. 가장 유명한 예는입니다 command > file.txt
. 여기서 파일은 존재하는 경우 잘립니다. 당신이 실행하는 경우 strace
에 bash -c 'true > /dev/null'
당신이 볼 수 openat(AT_FDCWD, "/dev/null", O_WRONLY|O_CREAT|O_TRUNC, 0666)
출력에. 물론 다양한 크기의 잘림을 위해서는 truncate()
syscall 이 필요합니다 . 이것을 의견 대신 실제 답변으로 원하는지 알려주십시오.
fopen
"w"(또는 "w +") 모드에서 파일을 열면 자동으로 길이가 0으로 잘립니다. 아니면 오래된 내용 중 일부를 보존하기 위해 0이 아닌 크기로 축소하는 것을 의미합니까?