栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

我不明白execlp()在Linux中的工作方式

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

我不明白execlp()在Linux中的工作方式

这个原型:

  int execlp(const char *file, const char *arg, ...);

说execlp是一个变量参数函数。这需要2

const char *
。其余的参数(如果有的话)是要移交给我们要运行的程序的其他参数-而且
char*
-所有这些都是C字符串(最后一个参数必须是NULL指针)

因此,该

file
参数是要执行的可执行文件的路径名。
arg
是我们希望
argv[0]
在可执行文件中显示的字符串。按照惯例,
argv[0]
只是可执行文件的文件名,通常将其设置为与相同
file

...
现在的其他参数给予可执行文件。

假设您是从命令行/ shell运行的:

$ ls

那将是

execlp("ls", "ls", (char *)NULL);
或者如果您跑步

$ ls -l /

那会是

execlp("ls", "ls", "-l", "/", (char *)NULL);

如此下去

execlp("/bin/sh", ..., "ls -l /bin/??", ...);

在这里,您将转到外壳程序/ bin / sh,并向外壳程序执行命令。该命令是“ ls -l / bin / ??”。您可以从命令行/
shell手动运行该命令:

 $ ls -l /bin/??

现在,如何运行shell并告诉它执行命令?您打开外壳的文档/手册页并阅读。

您要运行的是:

$ /bin/sh -c "ls -l /bin/??"

这变成

  execlp("/bin/sh","/bin/sh", "-c", "ls -l /bin/??", (char *)NULL);

旁注:

/bin/??
正在进行模式匹配,该模式匹配由外壳程序完成,并且扩展到/ bin /下的所有文件(具有2个字符)。如果你只是做了

  execlp("ls","ls", "-l", "/bin/??", (char *)NULL);

可能什么也不会发生(除非实际上有一个文件名为

/bin/??
),因为没有解释和扩展/ bin / ??的shell。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/408704.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号