Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更少:使用execvp()时缺少文件名_C_Exec_Argv_Execvp - Fatal编程技术网

更少:使用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参数被放置在

我试图使用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
参数被放置在
$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]
,等等。

清晰简单!谢谢我正在尽力去理解