如何抑制来自 gcc 链接器的以下警告:
警告:使用“mktemp”是危险的,最好使用“mkstemp”
我确实知道使用它更好,mkstemp()
但由于某种原因我必须使用mktemp()
函数。
如何抑制来自 gcc 链接器的以下警告:
警告:使用“mktemp”是危险的,最好使用“mkstemp”
我确实知道使用它更好,mkstemp()
但由于某种原因我必须使用mktemp()
函数。
我猜你需要路径,因为你将它传递给一个只接受路径名作为参数而不是文件描述符或FILE
指针的库。如果是这样,您可以创建一个临时目录mkdtemp
并将您的文件放在那里,那么实际名称并不重要,因为路径由于目录而已经是唯一的。
如果您必须使用,那么除了从 libc.so.6mktemp
中删除使用的部分之外,您无法采取任何措施来抑制该警告。mktemp
为什么一定要使用mktemp
?
两件事情:
mktemp
不是标准功能.gnu.warning.mktemp
部分实现的特殊警告如果您确实需要写入磁盘,请使用本机 OS API。或mkstemp()
按照建议。
如果您静态链接运行时,那么另一个选项是mktemp
在目标文件中编写您自己的版本。链接器应该更喜欢您的版本而不是运行时版本。
编辑:感谢 Jason Coco 指出了我mktemp
及其亲属的一个重大误解。现在解决这个问题要容易一些。由于链接器会更喜欢目标文件中的版本,因此您只需mktemp
按照mkstemp
.
唯一的困难是清理将返回给您的文件描述符mkstemp
并使一切线程安全。atexit
如果您可以限制需要多少临时文件,则可以使用描述符的静态数组和-registered 函数进行清理。如果没有,请改用链表。
使用mkstemp
:
int fd = mkstemp(template);
在此调用之后,template
将替换为实际的文件名。您将拥有文件描述符和文件的路径。