C Linux中的setprogname
在Unix中,我知道有函数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
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