2010-03-02 29 views

回答

12

argv[0]应该是程序名称。它传递给程序的main函数。某些程序根据字符串argv[0]的不同来区分它们的行为。例如,如果使用的不是sh称为bash的GNU bash外壳将禁用它的一些特性。最好给与它通过path相同的价值。

在linux下,argv[0]是由top实用程序(它有可能从阅读条目获取/proc/

+0

如果argv [0]前面有一个破折号,如''-sh''或''-ksh'',则大多数shell将运行该概要文件。这也适用于伪装成'sh'和'bash'。登录过程如何请求shell来运行配置文件。 – 2010-03-02 16:15:57

5

argv [0]应该是要运行的命令的完整路径。

+1

没有义务为它是完整的路径;的确,这个价值并不一定与可执行文件的名字有关。如果是的话,这很方便,但绝对不能依赖它作为完整的路径名。 – 2010-03-02 16:17:08

2

我知道,这是不是你要找的答案,但有没有具体显示的进程名你为什么这样做?我想问的原因是,大多数如果不是所有的人的行动通常与任何system()execv()在Windows或Unix的库可用,更安全,更快捷,更不可能从间接错误遭受运行。我的意思是,例如,当PATH更改并突然您的代码停止工作。

如果你正在传递一个字符串,无论是全部或部分,并运行它,那么你也会把自己暴露给通过输入命令,可能会损害获得访问系统的用户。例如。想象你已经实现了使用find /home -name文件搜索和您的用户类型:

"%" -exec rm {} \; 

哎哟!

+0

这是一个家庭作业,我必须创建我自己的简单外壳,并且我被要求使用evecv(); – 2010-03-02 23:26:41

+0

采取了点。这可能不是家庭作业最好的主题。据推测,你的导师在某个时候会涵盖防御性编程?如果不是,也许你可以/应该建议他/她这样做?无论如何,祝你好运 - 我希望他们在我上大学的时候可以使用计算器! – 2010-03-03 22:37:08