프로그램이 /tmp에 있는 임시 파일을 삭제해야 합니까?

프로그램이 /tmp에 있는 임시 파일을 삭제해야 합니까?

이 기능을 사용하여 만든 임시 파일을 사용하는 프로그램이 있습니다 mkstemps. 이러한 파일은 /tmp디렉터리 내에 생성됩니다.

프로그램이 종료되면 이러한 파일이 자동으로 삭제됩니까?

내 프로그램이 종료되기 전에 이러한 파일을 삭제해야 하는지 알고 싶습니다. 자동으로 삭제되지 않는 경우 삭제하지 않고 보관할 수 있나요 /tmp? 아니면 프로그램이 종료되기 전에 사용하거나 삭제하는 것이 unlink더 나은 방법입니까 ?remove

답변1

다음 중 하나에 의해 생성된 파일mkstemp함수 계열프로그램 종료 시 자동으로 삭제되지 않습니다. 내용에 따라 에 보관하도록 선택할 수 있습니다 /tmp. 그러면 일반적으로 주기적으로 정리되지만 이는 다소 당황스러운 일입니다.

이 문제를 깔끔하게 처리하는 두 가지 주요 방법이 있습니다.

  • 다른 프로세스에서 임시 파일을 열 필요가 없거나 파일 설명자를 전달하여 이를 처리할 수 있는 경우 mkstemps반환하자마자 파일을 삭제할 수 있습니다. 파일은 계속 존재하지만 더 이상 표시되지 않습니다. 디렉토리 목록. 파일 설명자를 찾으면 close삭제됩니다.
  • atexit그렇지 않으면 파일 삭제를 위한 종료 기능을 등록하십시오.

답변2

open(O_CREAT)등을 사용하여 생성한 후 즉시 삭제 해야 하며 , 반환된 파일 설명자를 통해서만 사용해야 합니다.

이와 같은 더 높은 수준의 인터페이스가 tmpfile(3)이를 수행할 수 있으며, 예를 들어 O_TMPFILELinux에서 더 나은 접근 방식을 사용할 수도 있습니다.오픈(2)맨페이지에 설명되어 있음)

삭제하기 전에 프로그램이 비정상적으로 종료될 수 있으므로 "종료하기 전에" 삭제하는 것은 잘못된 것입니다.

관련 정보