In my application, I have a C process created which will be re-spawned if the process dies. Now I have a requirement to know if the process is spawned for the first time(after system reboot), due to which function X will be called, or if the process got re-spawned after a crash(runtime) due to which function Y will be called.
I tried creating temp files by the use of command mktemp() but the files seemed to be persistent even after the reboot.
So what would be best way to do it?
mktemp creates files in
/tmp (by default). In many distributions,
/tmp is persistent (i.e. disk-backed, not memory-backed).
What you are looking for is to create a file in a memory-backed mount. Typically these are the
tmpfs mounts. For example, on my Arch Linux laptop, my tmpfs mounts are:
$ mount | grep tmpfs [..] run on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755) shm on /dev/shm type tmpfs (rw,nosuid,nodev,noexec,relatime)
So on this system, I can open and write to files in
/run and they will be backed by my memory, they won't persist across boots and the access will be fast and cheap.
Back to your question, it seems that you can change the directory used by
mktemp. Quoting the man page:
-p DIR, --tmpdir[=DIR] interpret TEMPLATE relative to DIR; if DIR is not specified, use $TMPDIR if set, else /tmp. With this option, TEMPLATE must not be an absolute name; unlike with -t, TEMPLATE may contain slashes, but mktemp creates only the final component
EDIT - few more things: