Imagine the following code running as a thread:
void *thread_worker(void *q) {
for (;;) {
int fd = some_queue_get(q);
FILE *writer = fdopen(fd, "w");
if (!writer) { perror("fdopen"; close(fd); continue; }
// do something with writer
if (fclose(writer) == EOF) {
perror("fclose writer");
// should fd be closed here?
close(fd);
}
}
fclose(3)
can fail for various reasons - is there a guarantee that/when the underlying file descriptor is closed or that it is still open afterwards?
man fclose
does not provide the answer on my system either, but man 3p fclose
reveals the official version from the POSIX Programmer's manual, which is much more comprehensive on the matter:
The
fclose()
function shall perform the equivalent of aclose()
on the file descriptor that is associated with the stream pointed to by stream.
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