---
name: "stdio_ext"
section: "3"
platform: "linux"
package: "man-pages"
version: "6.19-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/stdio_ext"
---

# stdio\_ext(3)

interfaces to stdio FILE structure

## NAME

\_\_fbufsize, \_\_flbf, \_\_fpending, \_\_fpurge, \_\_freadable, \_\_freading, \_\_fsetlocking, \_\_fwritable, \_\_fwriting, \_flushlbf - interfaces to stdio FILE structure

## LIBRARY

Standard C library (*libc*, *-lc*)

## SYNOPSIS

```
#include <stdio.h>
#include <stdio_ext.h>
```

**size\_t \_\_fbufsize(FILE \****stream***);** **size\_t \_\_fpending(FILE \****stream***);** **int \_\_flbf(FILE \****stream***);** **int \_\_freadable(FILE \****stream***);** **int \_\_fwritable(FILE \****stream***);** **int \_\_freading(FILE \****stream***);** **int \_\_fwriting(FILE \****stream***);** **int \_\_fsetlocking(FILE \****stream***, int** *type***);** **void \_flushlbf(void);** **void \_\_fpurge(FILE \****stream***);**

## DESCRIPTION

Solaris introduced routines to allow portable access to the internals of the *FILE* structure, and glibc also implemented these.

The **\_\_fbufsize**() function returns the size of the buffer currently used by the given stream.

The **\_\_fpending**() function returns the number of characters in the output buffer. For wide-oriented streams the unit is wide characters. This function is undefined on buffers in reading mode, or opened read-only.

The **\_\_flbf**() function returns a nonzero value if the stream is line-buffered, and zero otherwise.

The **\_\_freadable**() function returns a nonzero value if the stream allows reading, and zero otherwise.

The **\_\_fwritable**() function returns a nonzero value if the stream allows writing, and zero otherwise.

The **\_\_freading**() function returns a nonzero value if the stream is read-only, or if the last operation on the stream was a read operation, and zero otherwise.

The **\_\_fwriting**() function returns a nonzero value if the stream is write-only (or append-only), or if the last operation on the stream was a write operation, and zero otherwise.

The **\_\_fsetlocking**() function can be used to select the desired type of locking on the stream. It returns the current type. The *type* argument can take the following three values:

- **FSETLOCKING\_INTERNAL**

  Perform implicit locking around every operation on the given stream (except for the \*\_unlocked ones). This is the default.

- **FSETLOCKING\_BYCALLER**

  The caller will take care of the locking (possibly using [**flockfile**(3)](/flockfile/3.md) in case there is more than one thread), and the stdio routines will not do locking until the state is reset to **FSETLOCKING\_INTERNAL**.

- **FSETLOCKING\_QUERY**

  Don't change the type of locking. (Only return it.)

The **\_flushlbf**() function flushes all line-buffered streams. (Presumably so that output to a terminal is forced out, say before reading keyboard input.)

The **\_\_fpurge**() function discards the contents of the stream's buffer.

## ATTRIBUTES

For an explanation of the terms used in this section, see [**attributes**(7)](/attributes/7.md).

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **\_\_fbufsize**(), **\_\_fpending**(), **\_\_fpurge**(), **\_\_fsetlocking**() | Thread safety | MT-Safe race:stream |
| **\_\_flbf**(), **\_\_freadable**(), **\_\_freading**(), **\_\_fwritable**(), **\_\_fwriting**(), **\_flushlbf**() | Thread safety | MT-Safe |

## SEE ALSO

[**flockfile**(3)](/flockfile/3.md), [**fpurge**(3)](/fpurge/3.md)
