### 5.22 `fputwc`, `putwc`, `fputwc_unlocked`, `putwc_unlocked`—write a wide character on a stream or file ¶

Synopsis

    #include <stdio.h>
    #include <wchar.h>
    wint_t fputwc(wchar_t wc, FILE *fp);

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <wchar.h>
    wint_t fputwc_unlocked(wchar_t wc, FILE *fp);

    #include <stdio.h>
    #include <wchar.h>
    wint_t _fputwc_r(struct _reent *ptr, wchar_t wc, FILE *fp);

    #include <stdio.h>
    #include <wchar.h>
    wint_t _fputwc_unlocked_r(struct _reent *ptr, wchar_t wc, FILE *fp);

    #include <stdio.h>
    #include <wchar.h>
    wint_t putwc(wchar_t wc, FILE *fp);

    #define _GNU_SOURCE
    #include <stdio.h>
    #include <wchar.h>
    wint_t putwc_unlocked(wchar_t wc, FILE *fp);

    #include <stdio.h>
    #include <wchar.h>
    wint_t _putwc_r(struct _reent *ptr, wchar_t wc, FILE *fp);

    #include <stdio.h>
    #include <wchar.h>
    wint_t _putwc_unlocked_r(struct _reent *ptr, wchar_t wc, FILE *fp);

Description
`fputwc` writes the wide character argument wc to the file or stream identified by fp.

If the file was opened with append mode (or if the stream cannot support positioning), then the new wide character goes at the end of the file or stream. Otherwise, the new wide character is written at the current value of the position indicator, and the position indicator oadvances by one.

`fputwc_unlocked` is a non-thread-safe version of `fputwc`. `fputwc_unlocked` may only safely be used within a scope protected by flockfile() (or ftrylockfile()) and funlockfile(). This function may safely be used in a multi-threaded program if and only if they are called while the invoking thread owns the (FILE *) object, as is the case after a successful call to the flockfile() or ftrylockfile() functions. If threads are disabled, then `fputwc_unlocked` is equivalent to `fputwc`.

The `putwc` and `putwc_unlocked` functions or macros function identically to `fputwc` and `fputwc_unlocked`. They may be implemented as a macro, and may evaluate its argument more than once. There is no reason ever to use them.

The `_fputwc_r`, `_putwc_r`, `_fputwc_unlocked_r`, and `_putwc_unlocked_r` functions are simply reentrant versions of the above that take an additional reentrant structure argument: ptr.

Returns
If successful, `fputwc` and `putwc` return their argument wc. If an error intervenes, the result is `EOF`. You can use ‘`ferror(fp)`’ to query for errors.

Portability
`fputwc` and `putwc` are required by C99 and POSIX.1-2001.

`fputwc_unlocked` and `putwc_unlocked` are GNU extensions.