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

# catopen(3)

open/close a message catalog

## NAME

catopen, catclose - open/close a message catalog

## LIBRARY

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

## SYNOPSIS

```
#include <nl_types.h>
```

**nl\_catd catopen(const char \****name***, int** *flag***);** **int catclose(nl\_catd** *catalog***);**

## DESCRIPTION

The function **catopen**() opens a message catalog and returns a catalog descriptor. The descriptor remains valid until **catclose**() or [**execve**(2)](/execve/2.md). If a file descriptor is used to implement catalog descriptors, then the **FD\_CLOEXEC** flag will be set.

The argument *name* specifies the name of the message catalog to be opened. If *name* specifies an absolute path (i.e., contains a '/'), then *name* specifies a pathname for the message catalog. Otherwise, the environment variable **NLSPATH** is used with *name* substituted for **%N** (see [**locale**(7)](/locale/7.md)). It is unspecified whether **NLSPATH** will be used when the process has root privileges. If **NLSPATH** does not exist in the environment, or if a message catalog cannot be opened in any of the paths specified by it, then an implementation defined path is used. This latter default path may depend on the **LC\_MESSAGES** locale setting when the *flag* argument is **NL\_CAT\_LOCALE** and on the **LANG** environment variable when the *flag* argument is 0. Changing the **LC\_MESSAGES** part of the locale may invalidate open catalog descriptors.

The *flag* argument to **catopen**() is used to indicate the source for the language to use. If it is set to **NL\_CAT\_LOCALE**, then it will use the current locale setting for **LC\_MESSAGES**. Otherwise, it will use the **LANG** environment variable.

The function **catclose**() closes the message catalog identified by *catalog*. It invalidates any subsequent references to the message catalog defined by *catalog*.

## RETURN VALUE

The function **catopen**() returns a message catalog descriptor of type *nl\_catd* on success. On failure, it returns *(nl\_catd) -1* and sets *errno* to indicate the error. The possible error values include all possible values for the [**open**(2)](/open/2.md) call.

The function **catclose**() returns 0 on success, or -1 on failure.

## ENVIRONMENT

- **LC\_MESSAGES**

  May be the source of the **LC\_MESSAGES** locale setting, and thus determine the language to use if *flag* is set to **NL\_CAT\_LOCALE**.

- **LANG**

  The language to use if *flag* is 0.

## ATTRIBUTES

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

| | | |
| --- | --- | --- |
| **Interface** | **Attribute** | **Value** |
| **catopen**() | Thread safety | MT-Safe env |
| **catclose**() | Thread safety | MT-Safe |

## VERSIONS

The above is the POSIX.1 description. The glibc value for **NL\_CAT\_LOCALE** is 1. The default path varies, but usually looks at a number of places below */usr/share/locale*.

## STANDARDS

POSIX.1-2008.

## HISTORY

POSIX.1-2001.

## SEE ALSO

[**catgets**(3)](/catgets/3.md), [**setlocale**(3)](/setlocale/3.md)
