我正在制作一个 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/