1*b1c37be5SHans Rosenfeld.\" 2*b1c37be5SHans Rosenfeld.\" This file and its contents are supplied under the terms of the 3*b1c37be5SHans Rosenfeld.\" Common Development and Distribution License ("CDDL"), version 1.0. 4*b1c37be5SHans Rosenfeld.\" You may only use this file in accordance with the terms of version 5*b1c37be5SHans Rosenfeld.\" 1.0 of the CDDL. 6*b1c37be5SHans Rosenfeld.\" 7*b1c37be5SHans Rosenfeld.\" A full copy of the text of the CDDL should have accompanied this 8*b1c37be5SHans Rosenfeld.\" source. A copy of the CDDL is also available via the Internet at 9*b1c37be5SHans Rosenfeld.\" http://www.illumos.org/license/CDDL. 10*b1c37be5SHans Rosenfeld.\" 11*b1c37be5SHans Rosenfeld.\" 12*b1c37be5SHans Rosenfeld.\" Copyright (c) 2025, Hans Rosenfeld 13*b1c37be5SHans Rosenfeld.\" 14*b1c37be5SHans Rosenfeld.Dd "April 25, 2024" 15*b1c37be5SHans Rosenfeld.Dt FDCLOSE 3C 16*b1c37be5SHans Rosenfeld.Os 17*b1c37be5SHans Rosenfeld.Sh NAME 18*b1c37be5SHans Rosenfeld.Nm fdclose 19*b1c37be5SHans Rosenfeld.Nd close a standard I/O stream without closing the underlying file descriptor 20*b1c37be5SHans Rosenfeld.Sh LIBRARY 21*b1c37be5SHans Rosenfeld.Lb libc 22*b1c37be5SHans Rosenfeld.Sh SYNOPSIS 23*b1c37be5SHans Rosenfeld.In stdio.h 24*b1c37be5SHans Rosenfeld.Ft int 25*b1c37be5SHans Rosenfeld.Fo fdclose 26*b1c37be5SHans Rosenfeld.Fa "FILE *stream" 27*b1c37be5SHans Rosenfeld.Fa "int *fdp" 28*b1c37be5SHans Rosenfeld.Fc 29*b1c37be5SHans Rosenfeld.Sh DESCRIPTION 30*b1c37be5SHans RosenfeldThe 31*b1c37be5SHans Rosenfeld.Fn fdclose 32*b1c37be5SHans Rosenfeldfunction is equivalent to 33*b1c37be5SHans Rosenfeld.Xr fclose 3C , 34*b1c37be5SHans Rosenfeldclosing the given standard I/O stream, except that it does not close the 35*b1c37be5SHans Rosenfeldunderlying file descriptor. 36*b1c37be5SHans Rosenfeld.Pp 37*b1c37be5SHans RosenfeldIf 38*b1c37be5SHans Rosenfeld.Fa fdp 39*b1c37be5SHans Rosenfeldis not 40*b1c37be5SHans Rosenfeld.Dv NULL , 41*b1c37be5SHans Rosenfeldit will be used to return the underlying file descriptor of the I/O stream. 42*b1c37be5SHans RosenfeldIf the stream does not have an underlying file descriptor associated with it, 43*b1c37be5SHans Rosenfeld.Fa fdp 44*b1c37be5SHans Rosenfeldwill be set to 45*b1c37be5SHans Rosenfeld.Sy -1 . 46*b1c37be5SHans RosenfeldThis is always done, regardless of any error returned by 47*b1c37be5SHans Rosenfeld.Fn fdclose . 48*b1c37be5SHans Rosenfeld.Pp 49*b1c37be5SHans RosenfeldIf 50*b1c37be5SHans Rosenfeld.Fa fdp 51*b1c37be5SHans Rosenfeldis 52*b1c37be5SHans Rosenfeld.Dv NULL , 53*b1c37be5SHans Rosenfeldno file descriptor will be returned. 54*b1c37be5SHans RosenfeldNote that regardless of the value passed for 55*b1c37be5SHans Rosenfeld.Fa fdp , 56*b1c37be5SHans Rosenfeldthe I/O stream will be closed without closing the underlying file descriptor. 57*b1c37be5SHans RosenfeldUsually callers who pass 58*b1c37be5SHans Rosenfeld.Dv NULL 59*b1c37be5SHans Rosenfeldfor 60*b1c37be5SHans Rosenfeld.Fa fdp 61*b1c37be5SHans Rosenfeldalready have the file descriptor's value available. 62*b1c37be5SHans Rosenfeld.Pp 63*b1c37be5SHans RosenfeldThe equivalent of 64*b1c37be5SHans Rosenfeld.Xr fflush 3C 65*b1c37be5SHans Rosenfeldis called on the stream before closing, thus any buffered or pending 66*b1c37be5SHans Rosenfeldinput is discarded while any buffered or pending output is written out 67*b1c37be5SHans Rosenfeldto the underlying file. 68*b1c37be5SHans RosenfeldThis includes the standard streams, 69*b1c37be5SHans Rosenfeld.Va stdin , 70*b1c37be5SHans Rosenfeld.Va stdout , 71*b1c37be5SHans Rosenfeldand 72*b1c37be5SHans Rosenfeld.Va stderr . 73*b1c37be5SHans Rosenfeld.Pp 74*b1c37be5SHans RosenfeldAfter the call to 75*b1c37be5SHans Rosenfeld.Fn fdclose , 76*b1c37be5SHans Rosenfeldany use of 77*b1c37be5SHans Rosenfeld.Fa stream 78*b1c37be5SHans Rosenfeldcauses undefined 79*b1c37be5SHans Rosenfeldbehavior. 80*b1c37be5SHans Rosenfeld.Sh RETURN VALUES 81*b1c37be5SHans RosenfeldUpon successful completion, the 82*b1c37be5SHans Rosenfeld.Fn fdclose 83*b1c37be5SHans Rosenfeldfunction returns 0. 84*b1c37be5SHans RosenfeldOtherwise, 85*b1c37be5SHans Rosenfeld.Dv EOF 86*b1c37be5SHans Rosenfeldis returned 87*b1c37be5SHans Rosenfeldand the global variable 88*b1c37be5SHans Rosenfeld.Va errno 89*b1c37be5SHans Rosenfeldis set to indicate the error. 90*b1c37be5SHans Rosenfeld.Sh ERRORS 91*b1c37be5SHans RosenfeldThe 92*b1c37be5SHans Rosenfeld.Fn fdclose 93*b1c37be5SHans Rosenfeldfunction will fail if: 94*b1c37be5SHans Rosenfeld.Bl -tag -width Er 95*b1c37be5SHans Rosenfeld.It Er ENOTSUP 96*b1c37be5SHans RosenfeldThe stream does not have an associated file descriptor. 97*b1c37be5SHans RosenfeldThe stream was closed nonetheless, and if 98*b1c37be5SHans Rosenfeld.Fa fdp 99*b1c37be5SHans Rosenfeldwas not 100*b1c37be5SHans Rosenfeld.Dv NULL , 101*b1c37be5SHans Rosenfeldit will have been set to -1. 102*b1c37be5SHans Rosenfeld.El 103*b1c37be5SHans Rosenfeld.Pp 104*b1c37be5SHans RosenfeldThe 105*b1c37be5SHans Rosenfeld.Fn fdclose 106*b1c37be5SHans Rosenfeldfunction may also fail and set 107*b1c37be5SHans Rosenfeld.Va errno 108*b1c37be5SHans Rosenfeldfor any of the errors specified in 109*b1c37be5SHans Rosenfeld.Xr fflush 3C . 110*b1c37be5SHans Rosenfeld.Pp 111*b1c37be5SHans RosenfeldEven in the case of an error returned by 112*b1c37be5SHans Rosenfeld.Fn fdclose , 113*b1c37be5SHans Rosenfeld.Fa stream 114*b1c37be5SHans Rosenfeldshould be considered closed. 115*b1c37be5SHans Rosenfeld.Sh INTERFACE STABILITY 116*b1c37be5SHans Rosenfeld.Sy Committed 117*b1c37be5SHans Rosenfeld.Sh MT-LEVEL 118*b1c37be5SHans Rosenfeld.Sy Mt-Safe 119*b1c37be5SHans Rosenfeld.Sh SEE ALSO 120*b1c37be5SHans Rosenfeld.Xr fclose 3C , 121*b1c37be5SHans Rosenfeld.Xr fflush 3C , 122*b1c37be5SHans Rosenfeld.Xr attributes 7 123