unix路径搜索C函数

2 c unix path

我正在编写UNIX shell,我必须使用execv()系统调用来创建一个进程.其中一个参数execv()是可执行文件的文件路径.因此,如果有人输入/bin/ls,它将运行ls可执行文件.但我需要的是一个函数,当ls输入时,它将搜索文件路径ls(如which命令).是否有允许我这样做的功能?

不幸的是,这是一个我不允许使用的学校项目execvp().我需要实现一些路径搜索功能,然后将该文件路径添加到execv()参数中.

Ste*_*ker 6

使用PATH = getenv("PATH")摆脱环境的路径字符串,然后用连续呼叫strtok(PATH,":"),然后strtok(NULL,":")从路径解析出PATH字符串转换成数组char **path,您将需要与分配malloc().将path[x]+ '/'+ argv[0]放入缓冲区,并使用access(buffer, X_OK)以查看是否可以在该路径位置执行文件,如果是,请执行您的execv(buffer,argv).


小智 3

我认为 execvp() 可以满足您的需要。

编辑:所以您实际上是在问如何手动执行此操作?在这种情况下...

  1. 在 envp 中找到你的路径(main() 的第三个参数)
  2. 将其拆分为单独的路径
  3. 使用 stat() 检查每个程序中是否存在您的程序
  4. 执行您发现的第一个存在的

或者,如果您想要一个真正可靠的实现,请使用这个。不过,它可能会引发抄袭检测器:)