无法使用 execl 列出特定目录

标签 c linux shell ls os.execl

我正在制作一个 C 程序,该程序使用 execl 来执行 ls 命令来列出文件。如果在没有任何命令行参数的情况下调用程序,则会列出当前目录,如果用户将文件目录指定为命令行参数,则会列出该目录。

execl("/bin/ls", "ls", NULL); 可以很好地列出当前目录

execl(argv[1], "ls", NULL); 是我用于命令行参数的内容。我认为这在代码方面工作得很好,但是当我制作命令行参数时我无法获得正确的语法:

./a.out/test/ls

最佳答案

直接来自 execl 的手册页

The initial argument for these functions is the pathname of a file which is to be executed.

因此,如果您要运行的命令是ls,那么execl 的第一个参数应该是"/bin/ls"

execl 的第二个参数也应该是 "/bin/ls"。这是因为 execl 的第二个参数作为 argv[0] 传递给程序,而 argv[0] 是应该是程序的路径。

因此,只有从 execl 的第三个参数开始,您才真正开始将实际参数传递给命令。所以调用应该是这样的

execl( "/bin/ls", "/bin/ls", argv[1], NULL );

关于无法使用 execl 列出特定目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24048431/

相关文章:

python - 如何将单个 PyObject(在 C++ 后端创建)传递给嵌入式 Python 解释器?

linux - 在 Linux 64 位上交叉编译 Windows 64 位程序集

c - 二叉树问题,C 代码,使用 malloc

c - 为什么这个程序没有给出任何输出(找出下一个回文和素数没有)?

linux - shell 脚本 sed 替换

linux - 从具有父目录的每个子文件夹复制特定文件

庆典 shell : change multiple file names to add leading zeros

ruby - 在 ubuntu 中安装 ruby​​-bundler 和更新 header 的困难

C:不兼容的类型?

linux - 希望使用命令计算第 1 列中位于第 6 列中特定日期范围内的项目数