C에서 tempfile을 사용해야하는 프로그램을 만들고 있다고 가정 해 봅시다./임시 tmp에 특수 임시 파일을 만드는 것은 좋은 생각이 아닙니다. 거기에 쓰기 및 읽기 시작할 수 있도록 임시 파일 이름을 제공하는 함수 또는 OS 호출이 있습니까?Linux에서 사용할 임시 파일의 이름을 어떻게 얻습니까?
답변
이 목적으로 mkstemp(3)
함수를 사용할 수 있습니다. 또 다른 대안은 tmpfile(3)
기능입니다. 어떤 파일을 선택할지는 파일을 C 라이브러리 파일 스트림 (tmpfile
)으로 열 것인지 직접 파일 디스크립터 (mkstemp
)로 열 것인지에 따라 다릅니다. tmpfile
기능은 프로그램을 끝내면 자동으로 파일을 삭제합니다.
이러한 기능을 사용하면 고유 한 파일 이름을 결정할 때와 파일을 만들 때 경쟁 조건이 발생하지 않으므로 두 프로그램이 같은 파일을 동시에 만들지 않도록 할 수 있습니다.
자세한 내용은 두 기능에 대한 설명서 페이지를 참조하십시오.
물론 : man mkstemp.
설명서 페이지에는 예제 사용법이 있습니다.
C lib에는 어떤 것이 있는지 잘 모르겠지만 쉘에서는 mktemp으로이 작업을 수행 할 수 있습니다.
@garethm :
난 당신이 찾고있는 기능이 tmpnam이라고 믿습니다.
당신은 확실히 하지 사용 tmpnam
해야한다. 그것은 내 대답에서 언급 한 경쟁 조건 문제로 고통 : 이름을 결정하고 그것을 여는 사이에, 다른 프로그램이 파일이나 심볼릭 링크를 만들 수 있습니다. 이것은 거대한 보안 구멍입니다.
매뉴얼 페이지 tmpnam
은 특별히 그것을 사용하지 말고 대신 mkstemp
또는 tmpfile
을 사용한다고 말합니다.
질문은 임시 파일 의 이름을으로 생성하는 방법입니다. mkstemp 나 tmpfile은 호출자에게 이름을 제공하지 않으며, 파일 설명자 또는 파일 핸들을 각각 반환합니다.
당신이 맞습니다, 마크, 질문은 임시 파일 이름을 묻습니다. 그러나 질문은 잘못되었습니다. 질문자는 임시 파일 이름을 정말로 원하지 않으며, 실제로 임시 파일을 원합니다. –
그런 다음 질문을 변경해야합니다. –
사실이 아닙니다 : mkstemp *는 주어진 템플릿을 수정하기 때문에 호출자에게 이름을 제공합니다. 호출자는 템플리트를 제공해야하지만 임시 디렉토리 (예 : $ TMPDIR, P_tmpdir 또는 "/ tmp")와 접두사, 여섯 개의 X를 선택하는 것은 비교적 간단합니다. –
이 권장되는 기능이기 때문에 당신은 때 mkstemp()를 사용합니다,하지만 당신은 설명이 일단 이름의 얻을 수 있도록이 파일 기술자를 반환
int fd;
fd = mkstemp("hdrXXXXXX);
/* Read out the link to our file descriptor. */
sprintf(path, "/proc/self/fd/%d", fd);
memset(result, 0, sizeof(result));
readlink(path, result, sizeof(result)-1);
/* Print the result. */
printf("%s\n", result);
이 [URL] (http://stackoverflow.com/help)를 확인하십시오. 콘텐츠 품질을 높이는 것이 유용 할 것입니다. –
- 1. 내 파일의 경로는 어떻게 얻습니까?
- 2. iPhone : iPhone에서 모든 주소록의 이름을 어떻게 얻습니까?
- 3. stdlib.h 파일의 system() 기능은 linux에서 어떻게 구현됩니까?
- 4. Perl 소켓은 Linux에서 호스트 이름을 어떻게 해석합니까?
- 5. Vista Media Center에서 현재 재생중인 파일의 파일 이름은 어떻게 얻습니까?
- 6. ASP .NET에서 클라이언트의 임시 포트 번호는 어떻게 얻습니까?
- 7. 임시 파일의 길이는 유지됩니까?
- 8. JavaScript에서 객체의 이름은 어떻게 얻습니까?
- 9. PHP는 주어진 PNG 이미지 파일의 비트 심도를 어떻게 얻습니까?
- 10. 프로그램을 시작하는 데 사용되는 관련 파일의 경로는 어떻게 얻습니까?
- 11. 이미지의 너비와 높이를 어떻게 얻습니까?
- 12. MySQL에서 어떻게 검색하고 결과를 얻습니까?
- 13. 폴더의 크기는 어떻게 얻습니까?
- 14. 모델로부터 어떻게 가치를 얻습니까?
- 15. 마우스 위치는 어떻게 얻습니까?
- 16. PHP에서 'referer'헤더를 어떻게 얻습니까?
- 17. 관리자 권한은 어떻게 얻습니까?
- 18. PHP 클래스 파일의 이름을 어떻게 지정해야합니까?
- 19. 이 파일의 이름을 어떻게 바꿉니 까?
- 20. ICEfaces에서 업로드 된 파일의 이름을 어떻게 선택합니까?
- 21. C++로 파일을 어떻게 얻습니까?
- 22. 배치 파일의 임시 파일 삭제
- 23. linux에서 windows 또는 mac 파일의 파일 끝을 어떻게 변경합니까?
- 24. MVC 2 RC를 사용할 때 현재 요청 영역을 어떻게 얻습니까?
- 25. jquery.couch.saveDoc를 사용할 때 성공 콜백에서 문서 ID를 어떻게 얻습니까?
- 26. Erlang에서 임시 파일 이름을 어떻게 만들 수 있습니까?
- 27. IIS에서 사이트 사용을 어떻게 얻습니까?
- 28. 연락처 그룹의 회원을 어떻게 얻습니까?
- 29. 테스트중인 격리 클래스는 어떻게 얻습니까?
- 30. Java에서 프로세스 ID를 어떻게 얻습니까?
은 mkstemp 단지에 열려있는 파일 기술자를 반환 새 파일이지만 mkstemp가 템플릿의 XXXXXX 문자를 대체하기 때문에 최종 이름을 얻을 수도 있습니다. – Angel