我只使用tempnam()函数来获取目录名称,所以这个安全警告并不适用于我的情况。我该如何禁用它?我找不到任何开关来实现。
如果你只需要目录名称,可以使用在<stdio.h>
中定义的字符串常量宏P_tmpdir
。
#include <stdio.h>
#include <fcntl.h>
#include <sys/stat.h>
char my_file[20];
#define __hide_section_warning(section_string) \
__asm__ (".section " section_string "\n.string \"\rquidquid agis prudenter agas et respice finem \"\n\t.previous");
/* If you want to hide the linker's output */
#define hide_warning(symbol) \
__hide_section_warning (".gnu.warning." #symbol)
hide_warning(tmpnam)
tmpnam( my_file );
lock_fd = open( my_file, O_CREAT | O_WRONLY, (S_IRUSR | S_IWUSR | S_IRGRP) );
然而,它仍将在Make.p文件中留下痕迹,因此并不完全干净,除了已经是一个hack。
附注:它在我的机器上运行 ¯\_(ツ)_/¯
mkdtemp
。"tempnam()函数返回一个指向字符串的指针,该字符串是有效的文件名,并且在tempnam()检查时不存在此名称的文件。"
警告是由于检查和稍后创建文件之间的竞争条件而引起的。
您只想获取目录名称?那有什么用呢?
就像陌生人已经说过的那样,您可以使用-Wno-deprecated-declarations禁用此类警告。
您可以使用GCC的-Wno-deprecated-declarations
选项来禁用所有此类警告。虽然我建议您妥善处理警告,并采纳编译器的建议。