在下面的代码中,似乎 XXXXXX 要求生成随机字符来替换它。这里的XXXXXX是什么意思呢?这是 中的一些特殊保留符号吗sprintf?
sprintf(tempName, "/tmp/%s-XXXXXX", filename.c_str());
Run Code Online (Sandbox Code Playgroud)
chq*_*lie 13
更多上下文会有所帮助,但从数组名称来看tempName,此sprintf调用可能正在编写一个与 、 或类似函数一起使用mktemp()的mkstemp()模板mkdtemp()。
sX对于 没有任何特殊含义sprintf,但由下一个用 调用的函数解释tempName。
这些 POSIX 函数在以下位置声明<unistd.h>:
概要
Run Code Online (Sandbox Code Playgroud)#include <unistd.h> char *mktemp(char *template); int mkstemp(char *template); char *mkdtemp(char *template);描述
该
mktemp()函数采用给定的文件名模板并覆盖其中的一部分以创建文件名。该文件名保证在函数调用时不存在,并且适合应用程序使用。
X模板可以是任意文件名,并附加一定数量的s,例如/tmp/temp.XXXXXX. 尾随的Xs 将替换为唯一的字母数字组合。可以返回的唯一文件名的数量取决于提供的 smktemp()的数量;X六个Xs 将导致选择 56800235584 (62 6 ) 个可能的临时文件名mktemp()之一。该
mkstemp()函数对模板进行相同的替换并创建模板文件,模式0600,返回一个打开用于读写的文件描述符。这避免了测试文件是否存在和打开文件以供使用之间的竞争。该
mkdtemp()函数对模板进行与中相同的替换mktemp(),并创建模板目录,模式 0700。
请注意,除非tempName分配了足够的空间来容纳filename.c_str()12 个字符和空终止符,snprintf()否则强烈建议使用 以避免未定义的行为,并限制字符数filename.c_str()以确保所有Xs 都出现在末尾:
#include <unistd.h>
char *mktemp(char *template);
int mkstemp(char *template);
char *mkdtemp(char *template);
Run Code Online (Sandbox Code Playgroud)