Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C/C++;tmpnam的线程安全性? 我需要在C++中使用 TMPNAM//COD>函数,但我需要知道它的线程安全性。也就是说,如果我有几个线程,每个线程都需要为一个临时文件获取不同的名称,那么我是否保证每个线程都会收到一个具有不同名称的文件?_C++_C_Temporary Files - Fatal编程技术网

C/C++;tmpnam的线程安全性? 我需要在C++中使用 TMPNAM//COD>函数,但我需要知道它的线程安全性。也就是说,如果我有几个线程,每个线程都需要为一个临时文件获取不同的名称,那么我是否保证每个线程都会收到一个具有不同名称的文件?

C/C++;tmpnam的线程安全性? 我需要在C++中使用 TMPNAM//COD>函数,但我需要知道它的线程安全性。也就是说,如果我有几个线程,每个线程都需要为一个临时文件获取不同的名称,那么我是否保证每个线程都会收到一个具有不同名称的文件?,c++,c,temporary-files,C++,C,Temporary Files,tmpnam仅保证该文件当时不存在,但它可能是在您自己创建之前创建的。为了安全地使用它,您将始终需要尝试创建打开的文件(filename,O|u create | O|u EXCL | O|u NOFOLLOW)。如果由于EEXIST或ELOOP而失败,请返回并尝试一个新名称 这对于防止符号链接攻击尤其重要,因为其他程序会创建一个从临时文件名到/etc/passwd或其他一些重要文件的符号链接 另外,请确保不要将NULL传递给tmpnam,因为此时使用的缓冲区对于所有线程都是相同的 另一种结合这

tmpnam仅保证该文件当时不存在,但它可能是在您自己创建之前创建的。为了安全地使用它,您将始终需要尝试创建打开的文件(filename,O|u create | O|u EXCL | O|u NOFOLLOW)。如果由于EEXIST或ELOOP而失败,请返回并尝试一个新名称

这对于防止符号链接攻击尤其重要,因为其他程序会创建一个从临时文件名到/etc/passwd或其他一些重要文件的符号链接

另外,请确保不要将NULL传递给tmpnam,因为此时使用的缓冲区对于所有线程都是相同的

另一种结合这些特性的方法是使用mkstemp()或mkostemp(),这将为您安全地创建文件


最后,如果您不需要文件名,可以使用tmpfile(),它将创建一个临时文件,该文件将在关闭时删除。

以可移植的方式避免符号链接遍历是不可能的。。。您可能只需要为windows编写一个版本,为*nix编写一个版本。或者使用一个安全的随机数生成器生成一个长文件名,并且冲突的概率非常小。