xref: /freebsd/lib/libc/gen/getprogname.3 (revision 4f8f43b06ed07e96a250855488cc531799d5b78f)
1.\"
2.\" Copyright (c) 2001 Christopher G. Demetriou
3.\" All rights reserved.
4.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\" 3. All advertising materials mentioning features or use of this software
14.\"    must display the following acknowledgement:
15.\"          This product includes software developed for the
16.\"          NetBSD Project.  See http://www.netbsd.org/ for
17.\"          information about NetBSD.
18.\" 4. The name of the author may not be used to endorse or promote products
19.\"    derived from this software without specific prior written permission.
20.\"
21.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
22.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
23.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
24.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
25.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
26.\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
27.\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
28.\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
29.\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
30.\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31.\"
32.Dd April 18, 2021
33.Dt GETPROGNAME 3
34.Os
35.Sh NAME
36.Nm getprogname ,
37.Nm setprogname
38.Nd get or set the program name
39.Sh LIBRARY
40.Lb libc
41.Sh SYNOPSIS
42.In stdlib.h
43.Ft const char *
44.Fn getprogname "void"
45.Ft void
46.Fn setprogname "const char *progname"
47.Sh DESCRIPTION
48The
49.Fn getprogname
50and
51.Fn setprogname
52functions manipulate the name of the current program.
53They are used by error-reporting routines to produce
54consistent output.
55.Pp
56The
57.Fn getprogname
58function returns the name of the program.
59If the name has not been set yet, it will return
60.Dv NULL .
61.Pp
62The
63.Fn setprogname
64function sets the name of the program to be the last component of the
65.Fa progname
66argument.
67Since a pointer to the given string is kept as the program name,
68it should not be modified for the rest of the program's lifetime.
69.Pp
70In
71.Fx ,
72the name of the program is set by the start-up code that is run before
73.Fn main ;
74thus,
75running
76.Fn setprogname
77is not necessary.
78Programs that desire maximum portability should still call it;
79on another operating system,
80these functions may be implemented in a portability library.
81Calling
82.Fn setprogname
83allows the aforementioned library to learn the program name without
84modifications to the start-up code.
85.Sh EXAMPLES
86The following example presents a simple program, which shows the difference
87between
88.Fn getprogname
89and
90.Va "argv[0]" .
91.Bd -literal -offset indent
92#include <stdio.h>
93#include <stdlib.h>
94
95int
96main(int argc, char** argv)
97{
98	printf("getprogname(): %s\en", getprogname());
99	printf("argv[0]: %s\en", argv[0]);
100	return (0);
101}
102.Ed
103.Pp
104When compiled and executed (e.g., with
105.Ql ./a.out )
106the output of the program is going to look like this:
107.Bd -literal -offset indent
108getprogname(): a.out
109argv[0]: ./a.out
110.Ed
111.Sh SEE ALSO
112.Xr err 3 ,
113.Xr setproctitle 3
114.Sh HISTORY
115These functions first appeared in
116.Nx 1.6 ,
117and made their way into
118.Fx 4.4 .
119