C++에서 tmpnam
함수를 사용해야하지만 스레드 안전성에 대해 알아야합니다. 즉, 각각 임시 파일에 대해 다른 이름을 가져야하는 여러 스레드가있는 경우 각 스레드가 다른 이름의 파일을받을 것이라고 보장합니까? 하지만 당신은 그렇게 자신을 할 수 전에 만들 수 있습니다 -C/C++ 스레드 안전 tmpnam?
4
A
답변
5
tmpnam이는 파일이 시간에 존재하지 않는 것을 보장한다. 파일을 안전하게 사용하려면 open (filename, O_CREAT | O_EXCL | O_NOFOLLOW)을 사용하여 파일을 만들어야합니다. 이것이 EEXIST 또는 ELOOP로 인해 실패하면 돌아가서 새 이름을 시도하십시오.
이 다른 프로그램이 etc/passwd에 또는 다른 중요한 파일 /에 임시 파일 이름에서 심볼릭 링크를 생성 심볼릭 링크 공격으로부터 보호하는 것이 특히 중요하다.
또한, 다음 사용되는 버퍼는 모든 스레드에 대해 동일합니다 당신이, tmpnam이하는 NULL을 전달하지 않습니다 있는지 확인하십시오.이 당신을 위해 안전하게 파일을 만듭니다은 mkstemp() 또는 mkostemp()를 사용하는 것입니다 결합하여 또 다른 방법. 당신은 파일 이름을 필요로하지 않는 경우
마지막으로, 가까이에 삭제됩니다 임시 파일을 생성합니다 TMPFILE()를 사용할 수 있습니다.
mkstemp는 유닉스에만 해당됩니다 ... ( – rlbond
어떤 플랫폼을 사용하고 있습니까? – bdonlan
크로스 플랫폼이 필요합니다. – rlbond