### 4.22 `fputws`, `fputws_unlocked`—write a wide character string in a file or stream

Synopsis

    #include <wchar.h>
    int fputws(const wchar_t *__restrict ws, FILE *__restrict fp);

    #define _GNU_SOURCE
    #include <wchar.h>
    int fputws_unlocked(const wchar_t *__restrict ws, FILE *__restrict fp);

    #include <wchar.h>
    int _fputws_r(struct _reent *ptr, const wchar_t *ws,
        FILE *fp);

    #include <wchar.h>
    int _fputws_unlocked_r(struct _reent *ptr, const wchar_t *ws,
        FILE *fp);

Description
`fputws` writes the wide character string at ws (but without the trailing null) to the file or stream identified by fp.

`fputws_unlocked` is a non-thread-safe version of `fputws`. `fputws_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 `fputws_unlocked` is equivalent to `fputws`.

`_fputws_r` and `_fputws_unlocked_r` are simply reentrant versions of the above that take an additional reentrant struct pointer argument: ptr.

Returns
If successful, the result is a non-negative integer; otherwise, the result is `-1` to indicate an error.

Portability
`fputws` is required by C99 and POSIX.1-2001.

`fputws_unlocked` is a GNU extension.