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이 아닌 크기로 축소하는 것을 의미합니까?