在Unix中我知道有函数setprogname
和getprogname
。 两者分别用于设置和获取程序名称。 他们在图书馆stdilib.c
中find。 我想知道是否Linux内置了这些函数,因为我不能让它们在Linux机器上运行(Ubuntu 10.04)。 这些function是否可用? 代码如下,以防万一我在网上find的手册没有讲完整个故事,我没有添加我需要的东西。 谢谢!
#define _XOPEN_SOURCE 500 #include<sys/stat.h> #include<sys/types.h> #include<errno.h> #include<fcntl.h> #include<stdio.h> #include<stdlib.h> #include<string.h> #include<unistd.h> int main (int argc, char *argv[]) { setprogname(argv[0]);
从关于{set,get}progname
名的* BSD手册页 :
getprogname()和setprogname()函数操作当前程序的名称。 它们被错误报告例程用来产生一致的输出。
如果您想自定义错误报告的程序名称和error_at_line
您可以声明并设置error_print_progname
变量, 如glibc手册中所述 :
如上所述,错误和error_at_line函数可以通过定义一个名为error_print_progname的变量来定制。
– 变量:void(*)error_print_progname(void)如果将error_print_progname变量定义为非零值,则指向的函数将由error或error_at_line调用。 预计将打印程序名称或做类似的有用的东西。
该函数预计将被打印到stderr流,并且必须能够处理流所具有的任何方向。
变量是全局的,并由所有线程共享。
编辑:我只是检查关于{set,get}progname
和error_print_progname
的gnulib手册:
在所有非glibc平台上都没有这个变量:MacOS X 10.5,FreeBSD 6.0,NetBSD 5.0,OpenBSD 3.8,Minix 3.1.8,AIX 5.1,HP-UX 11,IRIX 6.5,OSF / 1 5.1,Solaris 11 2011-11 ,Cygwin,mingw,MSVC 9,Interix 3.5,BeOS。
您可以在GNU / Linux上使用libbsd来从* 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;
}
使用这组参数:
gcc somec.c -o somec -lbsd
这对我有用。