tmpnam警告说它很危险

Cen*_*noc 25 c++ temporary-files

我得到这个警告说tmpnam是危险的,但我更喜欢使用它,因为它可以在Windows和Linux中使用.我想知道为什么它会被认为是危险的(我猜它是因为有可能被误用而不是实际上没有正常工作).

Sch*_*ron 26

来自tmpnam手册页:

tmpnam()函数每次调用时都会生成一个不同的字符串,最多可达TMP_MAX次.如果调用的次数超过TMP_MAX次,则行为是实现定义的.

虽然tmpnam()生成难以猜测的名称,但是在tmpnam()返回路径名的时间和程序打开它的时间之间,另一个程序可能使用open(2)创建该路径名,或者将其创建为符号链接.这可能导致安全漏洞.要避免这种可能性,请使用open(2)O_EXCL标志打开路径名.或者更好的是,使用mkstemp(3)或tmpfile(3).

Mktemp确实创建了文件,所以你确信它有效,而tmpnam返回一个名字,可能已经存在了.

  • 对于Windows,使用`mktemp`是Unix,你需要`tmpnam_s`和`_wtmpnam_s`.因此,与平台无关的版本并不那么容易. (2认同)