【发布时间】:2021-01-30 09:46:12
【问题描述】:
我最近一直在使用execve() 系统调用,我一直在试图弄清楚为什么它会打印我调用的函数的完整路径。
例如,当用execve 调用ls 时:
/usr/bin/ls: cannot access 'nofile': No such file or directory
我的意思是,如果我想一想,这很合乎逻辑。如果我在execve 中将/usr/bin/ls 称为filename,这就是路径名。
但是为什么ls系统调用输出是这样的:
ls: cannot access[...]
和我的不一样?
我想知道是否有任何解决方案可以找出我刚刚调用的程序的“名称”,而不是打印程序的完整路径。
因为这是execve的选择而不是我的选择,至少我猜是这样,我不确定。
谢谢。
【问题讨论】:
-
在大多数 Linux 系统上,
ls命令位于/bin/ls而不是/usr/bin/ls。在您的程序中也使用strace(1)、whereis(1) 和gdb(1) 和errno(3) -
我的意思是,它对输出有影响吗?我刚刚看到调用其他程序,如 make、cat、grep... 不会打印完整路径,而实际上只是
Usage: grep [OPTION] ....。我也不知道为什么。 -
这是来自
ls的错误消息。它们的格式或打印内容可能因程序而异。execve无法改变这一点,您的问题与execve几乎没有关系。
标签: c linux system-calls execve