からの逐語man tmpnam
:
この機能は絶対に使用しないでください。代わりに mkstemp(3) または tmpfile(3) を使用してください。
とにかく、あなたがそれを求めたように:
によって生成される名前は、 name のディレクトリを前に付けたtmpnam()
最大長のファイル名で構成されます。L_tmpnam
P_tmpdir
そのため、渡された to のバッファtmpnam()
は宣言するのが最適です (C99 の場合):
char pathname[strlen(P_tmpdir) + 1 + L_tmpnam + 1] = ""; /* +1 for dir delimiting `/` and +1 for zero-termination */
C99 以外の場合は、次のようにします。
size_t sizeTmpName = strlen(P_tmpdir) + 1 + L_tmpnam + 1;
char * pathname = calloc(sizeTmpName, sizeof (*pathname));
if (NULL == pathname)
perror("calloc() for 'pathname'");
次に、tmpnam()
次のように呼び出します。
if (NULL == tmpnam(pathname))
fprintf(stderr, "tmpnam(): a unique name cannot be generated.\n");
else
printf("unique name: %s\n", pathname);
... /* do soemthing */
/* if on non C99 and calloc(() was called: */
free(pathname);