입력 파일이 출력 파일이 될 수 없는 이유는 무엇입니까?

입력 파일이 출력 파일이 될 수 없는 이유는 무엇입니까?

특히 x와 y가 파일인 경우 cat x y > y.cat x >> x

"입력 파일이 출력 파일입니다." 오류가 발생하지 않으면 어떻게 되나요? 기본적으로 왜 이러한 명령을 실행할 수 없습니까?

답변1

cat x y > ycp x yy( 시작 시간 전에 잘렸기 때문에) 와 동일하며 cat그 뒤에 cat y >> y.

cat x >> x이는 디스크가 가득 차거나 파일 시스템의 파일 크기 제한에 도달할 때까지 무한 루프가 됩니다(파일 끝에 계속 추가한 다음 다시 읽어서 다시 추가하기 때문입니다).

이 "오류"는 아무 작업도 수행되지 않았다는 의미가 아니라 cat해당 특정 파일을 건너뛰었다는 알림일 뿐입니다(GNU에서는 cat적어도). 당신은 그것을 실행하는 것이 "허용"되어 있지만, 당신이 원하는 것을 하지 않을 수도 있습니다.

이 메시지를 생성하는 GNU 테스트는 다음 cat과 같습니다.

  1. 출력(fd 0)은 일반 파일입니다.
  2. 장치(필드)와 inode(필드)는 출력 fd와 검사 중인 입력 파일에 대해 st_dev동일합니다 st_ino.
  3. 입력 파일의 오프셋은 파일 크기보다 작습니다(그래서 비어 있지 않습니다. 이 시점에서 오프셋이 0이 아닌 경우는 생각할 수 없지만 아마도 하나 있을 것입니다).

이들 사항이 모두 적용되면 진단 정보를 인쇄하고 다음 입력 파일로 이동합니다.

명령의 일부 버전은 cat이 검사를 수행하지 않으므로 이러한 일이 발생하도록 할 수 있습니다. 나는 그들이 확인했지만 동일한 파일이라고 말할 수는 없었지만 맨 위에서 하나를 말할 수는 없는 시스템을 상상할 수 있습니다. 어느 쪽이든 나쁘게 끝날 수 있습니다. 구현이 전체 메모리 매핑된 파일을 한 번만 쓰는 경우 cat루프 대신 파일이 두 배로 늘어날 수 있지만 이는 덜 심각한 경우입니다.

관련 정보