나는이 보안 경고가 내 사건에 적용되지 않도록 디렉토리 이름을 얻기 위해서만 tempnam()을 사용하고 있습니다. 어떻게 비활성화 할 수 있습니까? 스위치를 찾을 수 없습니다.`tempnam '을 비활성화시키는 어떤 방법도 위험합니다.`mkstemp'gcc 경고를 더 잘 사용 하시겠습니까?
12
A
답변
6
실제로 디렉터리 이름 만 필요하면 <stdio.h>
에 정의 된 문자열 상수 매크로 P_tmpdir
을 사용하십시오.
-3
GCC의 -Wno-deprecated-declarations
옵션을 사용하면 이와 같은 경고를 모두 사용 중지 할 수 있습니다. 그래도 경고를 올바르게 처리하고 컴파일러의 제안을받는 것이 좋습니다.
0
"tempnam() 함수는 유효한 파일 이름 인 문자열에 대한 포인터를 반환하고 tempnam()을 검사 할 때이 이름을 가진 파일이 존재하지 않도록합니다."
경고는 파일을 확인하고 나중에 만드는 사이의 경쟁 조건으로 인해 발생합니다.
디렉토리 이름 만 가져 오시겠습니까? 그게 무엇에 좋은가?
낯선 사람이 이미 말했듯이, -Wno-deprecated-declarations를 사용하여이 경고 및 유사한 경고를 비활성화 할 수 있습니다.
+0
임시 디렉토리에 FIFO 파일을 만들어서 dirname (tempnam ...)을 사용해야합니다. – jackhab
저에게는이 경고 유형이 없어지지 않습니다. – Jack
나를 위해 그것은 심지어 -W와 함께 침묵하지 않았다. – FabioCosta
이것은 링크에서 생성 된 경고이며 단계를 컴파일하는 것이 아니므로이 경고는 아무런 효과가 없다. (링크 단계에 제공해도 작동하지 않습니다.) (g ++ 4.8.2 이상) –