I need to interface with some executables that expect to be passed filenames for input or output:
./helper in.txt out.txt
What is the standard (and preferably cross-platform) way of doing this?
I could create lots of temporary files int the /tmp directory, but I am concerned that creating tons of files might cause some issues. Also, I want to be able to install my program and not have to worry about permissions later.
I could also just be Unix specific and try to go for a solution using pipes, etc. But then, I don’t think I would be able to find a solution with nice, unnamed pipes.
My alternative to this would be piping input to stdin (all the executables I need also accept it this way) and get the results from stdout. However, the outputs they give to stdout are all different and I would need to write lots of adapters by hand to make this uniform (the outputs through files obey a same standard). I don’t like how this would lock in my program to a couple of formats though.
There isn’t a right or wrong answer necessarily. Reading/writing to stdin/out is probably cleaner and doesn’t use disk space. However, using temporary files is just fine too as long as you do it safely. Specifically, see the
mktempandmkstempmanual page for functions that let you create temporary files for short-term usage. Just clean them up afterward (unlink) and it’s just fine to use and manipulate temp files.