xref: /illumos-gate/usr/src/man/man3c/fdclose.3c (revision b1c37be59f1fe13f2e54002b32bc505358776e9f)
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