getprogname,
    setprogname — get or set the
    program name
Standard C Library (libc, -lc)
#include
    <stdlib.h>
const char *
  
  getprogname(void);
void
  
  setprogname(const
    char *progname);
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.
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
 
These functions first appeared in NetBSD
    1.6, and made their way into FreeBSD 4.4.