2009-07-17 2 views
4

C++에서 tmpnam 함수를 사용해야하지만 스레드 안전성에 대해 알아야합니다. 즉, 각각 임시 파일에 대해 다른 이름을 가져야하는 여러 스레드가있는 경우 각 스레드가 다른 이름의 파일을받을 것이라고 보장합니까? 하지만 당신은 그렇게 자신을 할 수 전에 만들 수 있습니다 -C/C++ 스레드 안전 tmpnam?

답변

5

tmpnam이는 파일이 시간에 존재하지 않는 것을 보장한다. 파일을 안전하게 사용하려면 open (filename, O_CREAT | O_EXCL | O_NOFOLLOW)을 사용하여 파일을 만들어야합니다. 이것이 EEXIST 또는 ELOOP로 인해 실패하면 돌아가서 새 이름을 시도하십시오.

이 다른 프로그램이 etc/passwd에 또는 다른 중요한 파일 /에 임시 파일 이름에서 심볼릭 링크를 생성 심볼릭 링크 공격으로부터 보호하는 것이 특히 중요하다.

또한, 다음 사용되는 버퍼는 모든 스레드에 대해 동일합니다 당신이, tmpnam이하는 NULL을 전달하지 않습니다 있는지 확인하십시오.

이 당신을 위해 안전하게 파일을 만듭니다은 mkstemp() 또는 mkostemp()를 사용하는 것입니다 결합하여 또 다른 방법. 당신은 파일 이름을 필요로하지 않는 경우

마지막으로, 가까이에 삭제됩니다 임시 파일을 생성합니다 TMPFILE()를 사용할 수 있습니다.

+0

mkstemp는 유닉스에만 해당됩니다 ... ( – rlbond

+0

어떤 플랫폼을 사용하고 있습니까? – bdonlan

+0

크로스 플랫폼이 필요합니다. – rlbond