更少:使用execvp()时缺少文件名
我试图使用execvp()来减少运行,但我一直遇到相同的错误,即:更少:使用execvp()时缺少文件名,c,exec,argv,execvp,C,Exec,Argv,Execvp,我试图使用execvp()来减少运行,但我一直遇到相同的错误,即: Missing filename ("less --help" for help) 我假设我试图输入的文件完全错误。谁能给我一些指导?下面是我尝试实现它的代码行: // args[0] == "tempFile" which is in my directory execvp("less", args) 就像在命令行上使用 sh -c 'script body here' arg0 arg1 arg2 arg0参数被放置在
Missing filename ("less --help" for help)
我假设我试图输入的文件完全错误。谁能给我一些指导?下面是我尝试实现它的代码行:
// args[0] == "tempFile" which is in my directory
execvp("less", args)
就像在命令行上使用
sh -c 'script body here' arg0 arg1 arg2
arg0
参数被放置在$0
中(这通常是进程的名称),并且实际上不作为脚本本身的命令行参数之一计算(它不是$@
的一部分,$#
将不计算它)。$1
中可用的第一个命令行参数是arg1
在您的情况下,在C代码中使用
args[0]=“less”
和args[1]=“tempFile”
args[3]
应该是空指针。argv[0]
是您为命令指定的名称。您执行的命令使用它来了解它是如何被调用的。通常,您希望在此处使用类似less
的内容:
argv[0] = "less";
argv[1] = "filename";
argv[2] = NULL;
execvp("less", argv);
参数0取自
argv[0]
,通常是命令名。通常,它是作为第一个参数传递给execvp
(shell就是这样做的)的同一个字符串
来自argv[1]
的参数1是第一个“实”参数。因此,传递一个包含以下内容的3元素数组:char*args[]={“less”,“tempFile”,NULL}
大多数语言都遵循相同的参数编号。例如,如果调用一个shell脚本,它会将传递的
argv[0]
视为它的$0
,传递的argv[1]
视为$1
,等等。Perl是一个显著的例外:在Perl脚本中,argv[0]
是$0
,argv[1]
是$argv[0]
,argv[2]
是$argv[1]
,等等。清晰简单!谢谢我正在尽力去理解