I've got a function that needs to be able to write to either stdout, or to a file, depending on what the user wants. It defaults to standard out though. To accomplish this, I'm doing the following (minus error checking etc):
FILE* out;
if (writeToFile) { /*Code to open file*/; }
else
out = stdout;
// ...rest of the function goes here
if (out != stdout)
fclose(out);
This certainly does the trick, but I have no idea how portable it is. And if it's not, and/or there's another problem with it, how should I go about this?
Yes, it's portable and it's fine, provided you don't also mess with the low-level implementation of *stdout
(e.g. by calling close(fileno(stdout))
on Posix or using dup
).
It should be fine. You might have trouble if you pass the pointer back and forth across the boundary of a DLL (ie, C code outside DLL passes pointer to stdout to C code inside DLL), but apart from that it should be portable.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With