How can I suppress following warning from gcc linker:
warning: the use of 'mktemp' is dangerous, better use 'mkstemp'
I do know that it's better to use mkstemp()
but for some reason I have to use mktemp()
function.
How can I suppress following warning from gcc linker:
warning: the use of 'mktemp' is dangerous, better use 'mkstemp'
I do know that it's better to use mkstemp()
but for some reason I have to use mktemp()
function.
I guess you need the path because you pass it to a library that only accepts path names as argument and not file descriptors or
FILE
pointers. If so you can create a temp dir withmkdtemp
and place your file there, the actual name is then unimportant because the path is already unique because of the directory.If you have to use
mktemp
then there is not anything you can do to suppress that warning short of removing the section that usesmktemp
from libc.so.6.Why do you have to use
mktemp
?If you are statically linking the runtime, then the other option is to write your own version of
mktemp
in an object file. The linker should prefer your version over the runtime version.Edit: Thanks to Jason Coco for pointing out a major misunderstanding that I had in
mktemp
and its relatives. This one is a little easier to solve now. Since the linker will prefer a version in an object file, you just need to writemktemp
in terms ofmkstemp
.The only difficulties are cleaning up the file descriptors that
mkstemp
will return to you and making everything thread safe. You could use a static array of descriptors and anatexit
-registered function for cleanup if you can put a cap on how many temporary files you need. If not, just use a linked list instead.Use
mkstemp
:After this call,
template
will be replaced with the actual file name. You will have the file descriptor and the file's path.Two things:
mktemp
is not a standard function.gnu.warning.mktemp
sectionUse a native OS API if you really need to write to the disk. Or
mkstemp()
as suggested.