---
name: "getprogname"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["linux", "freebsd", "macos"]
url: "https://new.carta.tech/getprogname"
---

# getprogname(3)

get or set the program name

## NAME

**getprogname**, **setprogname** – get or set the program name

## LIBRARY

Standard C Library (libc, -lc)

## SYNOPSIS

**#include \<stdlib.h\>**

*const* *char* *\**\

**getprogname**(*void*);

*void*\

**setprogname**(*const char \*progname*);

## DESCRIPTION

The **getprogname**() and **setprogname**() functions manipulate the name of the current program. They are used by error-reporting routines to produce consistent output.

The **getprogname**() function returns the name of the program. If the name has not been set yet, it will return NULL.

The **setprogname**() function sets the name of the program to be the last component of the *progname* argument. Since a pointer to the given string is kept as the program name, it should not be modified for the rest of the program's lifetime.

In FreeBSD, the name of the program is set by the start-up code that is run before **main**(); thus, running **setprogname**() is not necessary. Programs that desire maximum portability should still call it; on another operating system, these functions may be implemented in a portability library. Calling **setprogname**() allows the aforementioned library to learn the program name without modifications to the start-up code.

## EXAMPLES

The following example presents a simple program, which shows the difference between **getprogname**() and *argv\[0\]*.

```
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char** argv)
{
	printf("getprogname(): %s\n", getprogname());
	printf("argv[0]: %s\n", argv[0]);
	return (0);
}
```

When compiled and executed (e.g., with ‘./a.out’) the output of the program is going to look like this:

```
getprogname(): a.out
argv[0]: ./a.out
```

## SEE ALSO

[err(3)](/err/3.md), [setproctitle(3)](/setproctitle/3.md)

## HISTORY

These functions first appeared in NetBSD 1.6, and made their way into FreeBSD 4.4.
