不用自己写代码,在glibc的errno.h文件中提供了两个当前运行程序名的全局变量,这两个变量可以通过#define _GNU_SOURCE来直接引用。
如下面的例子中,可以直接打印出当前运行的程序的名称,但是必须要#define _GNU_SOURCE和include errno.h
#define _GNU_SOURCE
#include <errno.h>
#include <stdio.h>
int main()
{
printf("program_invocation_name: %s\n", program_invocation_name);
printf("program_invocation_short_name: %s\n", program_invocation_short_name);
return 0;
}
打印结果:
program_invocation_name: ./t program_invocation_short_name: t
program_invocation_name,program_invocation_short_name,用于获取调用程序的名称
使用时需要在C语言程序中添加如下:
#define _GUN_SOURCE
#include
program_invocation_name包含了调用进程的名称,与main函数的argv[0]是一样的,区别在于program_invocation_name是一个全局变量。
program_invocation_short_name包含了调用进程都的basename,也就是通过/分割的最后一个部分。
注意:#define _GNU_SOURCE 是一个预处理指令,它告诉编译器在处理源代码时启用额外的 GNU 特定的功能。这个宏通常在编写针对 GNU 系统(如 Linux)的代码时使用,它允许程序员使用一些特定于 GNU 编译器集合(GCC)的特性,或者是其他在 GNU 系统中广泛使用的但不是标准化的特性。应当尽量避免在需要移植的程序中使用。