我正在编写UNIX shell,我必须使用execv()
系统调用来创建一个进程.其中一个参数execv()
是可执行文件的文件路径.因此,如果有人输入/bin/ls
,它将运行ls
可执行文件.但我需要的是一个函数,当ls
输入时,它将搜索文件路径ls
(如which
命令).是否有允许我这样做的功能?
不幸的是,这是一个我不允许使用的学校项目execvp()
.我需要实现一些路径搜索功能,然后将该文件路径添加到execv()
参数中.
使用PATH = getenv("PATH")
摆脱环境的路径字符串,然后用连续呼叫strtok(PATH,":")
,然后strtok(NULL,":")
从路径解析出PATH
字符串转换成数组char **path
,您将需要与分配malloc()
.将path[x]
+ '/'
+ argv[0]
放入缓冲区,并使用access(buffer, X_OK)
以查看是否可以在该路径位置执行文件,如果是,请执行您的execv(buffer,argv)
.