抑制警告:使用`mktemp'很危险

时间:2009-04-12 17:37:21

标签: c security gcc gcc-warning mktemp

如何从gcc链接器中抑制以下警告:

警告:使用'mktemp'是危险的,更好地使用'mkstemp'

我知道最好使用mkstemp(),但由于某种原因,我必须使用mktemp()函数。

5 个答案:

答案 0 :(得分:8)

我猜你需要路径,因为你把它传递给一个只接受路径名作为参数而不是文件描述符或FILE指针的库。如果是这样,您可以使用mkdtemp创建临时目录并将文件放在那里,实际名称就不重要了,因为路径因目录而已经是唯一的。

答案 1 :(得分:4)

如果您 使用mktemp,那么除了从libc.so.6删除使用mktemp的部分之外,您无法做任何事情来抑制该警告

为什么 使用mktemp

答案 2 :(得分:4)

两件事:

  • mktemp不是标准功能
  • 警告是在链接器中实现为.gnu.warning.mktemp部分
  • 的特殊警告

如果确实需要写入磁盘,请使用本机OS API。或按照建议mkstemp()

答案 3 :(得分:1)

如果要静态链接运行时,则另一个选项是在对象文件中编写自己的mktemp版本。链接器应该优先于运行时版本的版本。

编辑:感谢Jason Coco指出我在mktemp及其亲属中遇到的一个重大误解。这个现在更容易解决。由于链接器更喜欢目标文件中的版本,因此您只需要根据mktemp编写mkstemp

唯一的困难是清理mkstemp将返回给你并使一切线程安全的文件描述符。如果可以对需要的临时文件数量设置上限,则可以使用静态数组描述符和atexit注册函数进行清理。如果没有,只需使用链接列表。

答案 4 :(得分:0)

使用mkstemp

int fd = mkstemp(template);

此次通话后,template将替换为实际的文件名。您将拥有文件描述符和文件路径。