c - 如何使用正确的参数在 C 中调用 execl()?

标签 c exec external quotes unistd.h

我有 vlc(复制视频的程序) 如果我输入一个 shell:

/home/vlc "/home/my movies/我想看的电影.mkv"

它打开并重现电影。

但是,当我运行以下程序时:

#include <unistd.h>

int main(void) {

  execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

  return 0;
}

vlc 打开但不重现任何内容。我该如何解决这个问题?

我尝试过的事情:

我猜的

execl("/home/vlc", "/home/my movies/the movie i want to see.mkv",NULL);

相当于在 shell 中输入:

/home/vlc /home/my movies/the movie i want to see.mkv

这行不通,所以我试过了

 execl("/home/vlc", "\"/home/my movies/the movie i want to see.mkv\"",NULL);

并且 vlc 打开但也不会重现。

我没有在最后写 NULL,而是尝试了 0, (char*) 0, 1 .... 没有帮助。 帮助!!!!

最佳答案

execl("/home/vlc", 
  "/home/vlc", "/home/my movies/the movie i want to see.mkv", 
  (char*) NULL);

您需要指定所有参数,包括 argv[0]这不是从可执行文件中获取的。

还要确保最终的 NULL被转换为 char* .

详情在这里:http://pubs.opengroup.org/onlinepubs/9699919799/functions/exec.html

关于c - 如何使用正确的参数在 C 中调用 execl()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596839/

相关文章:

.NET - 查找外部应用程序主线程ID

c - GMP GNU 代码有错误?

c++ - 什么是 char* const argv[]?

javascript - 如何允许我的 Chrome 应用访问外部 Api

git - 自定义 Git 命令在执行 git diff 后死于信号 13 (SIGPIPE)

sql-server - SQL Server exec 关键字

javascript - 使用两个 js 文件的同一个脚本?

c++ - 是否有任何 c/c++ 编译器可以警告(或给出错误)或枚举转换为 int?

java - 当使用 StandardOpenOption.SYNC 打开底层 channel 时,我们是否必须刷新 MappedByteBuffer

c - strncpy 引入有趣的角色