将可选参数传递到 C execlp() 时出现问题

jav*_*ner 2 c command-line optional-parameters

我正在编写一个 C 程序,用于execlp()运行 linux 命令行工具convert. 该命令采用可选参数。但是,当与 一起使用时execlp(),我的 C 程序无法识别我传入的标志,因此无法正确执行该命令。

例如,如果我在终端中运行此命令,convert -resize 10% src.jpg dst.jpg它会将 src 图像的大小调整 10%,并将其保存到 dst。但是当我用这段代码运行我的C程序时

rc = execlp("convert", "-resize 10%", src, dst, NULL);
Run Code Online (Sandbox Code Playgroud)

我的计算机无法识别该resize -10%标志,并且不会对我的源图像执行任何操作。这是为什么?

dbu*_*ush 5

按照惯例,进程的第一个参数(可通过 访问argv[0])是进程的名称。您还没有包含它,因此"-resize 10%"被读取为进程名称而不是选项。

另外,"-resize 10%"实际上是用空格分隔的两个参数,因此需要将它们分开。

rc = execlp("convert", "convert", "-resize", "10%", src, dst, NULL);
Run Code Online (Sandbox Code Playgroud)