C Linux中的setprogname

C Linux中的setprogname,c,linux,function,unix,C,Linux,Function,Unix,在Unix中,我知道有函数setprogname和getprogname。两者分别用于设置和获取程序名。它们可以在库stdilib.c中找到。我想知道Linux是否也内置了这些函数,因为我无法让它们在Linux机器上运行(Ubuntu 10.04)。这些功能可用吗?下面是代码,以防我在网上找到的手册页没有说明全部情况,也没有添加我需要的内容。 谢谢 \define\XOPEN\u源代码500 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main(int argc,ch

在Unix中,我知道有函数
setprogname
getprogname
。两者分别用于设置和获取程序名。它们可以在库
stdilib.c
中找到。我想知道Linux是否也内置了这些函数,因为我无法让它们在Linux机器上运行(Ubuntu 10.04)。这些功能可用吗?下面是代码,以防我在网上找到的手册页没有说明全部情况,也没有添加我需要的内容。 谢谢

\define\XOPEN\u源代码500
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
setprogname(argv[0]);
来自about
{set,get}progname

getprogname()和setprogname()函数操作 这个 当前程序。它们被错误报告例程用来生成 一致的输出

如果您想使用
error
error\u在第行
自定义错误报告的程序名,您可以将
error\u print\u progname
变量声明并设置为:

如上所述,可以使用error和error_at_line函数 通过定义名为error\u print\u progname的变量进行自定义

-变量:void(*)错误\u打印\u程序名(void),如果 错误\u print\u progname变量定义为非零值 指向的函数由错误或错误\u在\u行调用。它是 希望打印程序名或执行类似有用的操作

该函数应打印到stderr流,并且必须 能够处理流的任何方向

该变量是全局变量,由所有线程共享

编辑:我只是查看了gnulib手册中关于
{set,get}progname
错误\u print\u progname

所有非glibc平台上都缺少此变量:MacOS X 10.5、FreeBSD 6.0、, NetBSD 5.0、OpenBSD 3.8、Minix 3.1.8、AIX5.1、HP-UX11、IRIX 6.5、OSF/15.1、, Solaris 11 2011-11,明州Cygwin,MSVC 9,Interix 3.5,BeOS


您可以在GNU/Linux上使用,从*BSD操作系统访问这些和其他有用的实用程序功能。

在ubuntu 12.04上尝试了这一点,它可以工作:

安装
libbsd dev
软件包。然后尝试编译以下代码:

//filename=somec.c
#include <stdio.h>
#include <bsd/stdlib.h>

int main(int argc, char *argv[]){

    if(argc>1)
            setprogname((char*)argv[1]);
    printf("Program name is: %s\n",getprogname());
    return 0;

这对我很有用。

这似乎是基于BSD的系统特有的功能,因此在Linux上不可用。这些功能在POSIX:中没有出现,因此它们不是Unix的一部分,但可能是基于Unix的一些不同功能?通过使用libbsd覆盖模式(这是推荐的模式),您不需要使用libbsd特定的头路径,这将使代码更易于移植。有关如何使用它的信息,请查看libbsd(7)手册页。
//filename=somec.c
#include <stdio.h>
#include <bsd/stdlib.h>

int main(int argc, char *argv[]){

    if(argc>1)
            setprogname((char*)argv[1]);
    printf("Program name is: %s\n",getprogname());
    return 0;
gcc somec.c -o somec -lbsd