SUSv2 does not mention the use of TMPDIR; glibc will use it only when the program is not suid. SVID2 specifies that the directory used under (iv) is /tmp. SVID2 specifies that the string returned by tempnam() was allocated using malloc(3) and hence can be freed by free(3).
The tempnam() function generates a different string each time it is called, up to TMP_MAX (defined in <stdio.h>) times. If it is called more than TMP_MAX times, the behaviour is implementation defined.
In case the pfx argument has length larger than five, glibc will use the first five bytes. Upon failure to find a unique name, glibc will return EEXIST.
The precise meaning of appropriate is undefined; it is unspecified how accessibility of a directory is determined. Never use this function. Use mkstemp(3) instead.
SVID 2, BSD 4.3
mktemp(3), mkstemp(3), tmpfile(3), tmpnam(3)