我想创建自己的程序,谁将在linux中作为which
命令工作。原始which
命令适用于(pwd
)的示例:
$ which pwd
/bin/pwd
但我的计划是这样的:
$ ./prog1 pwd
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games pwd
你能纠正我的节目吗?源代码:
#include <sys/param.h>
#include <sys/stat.h>
#include <errno.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main(int argc, char *argv[])
{
char *systemPath, *path, *fileName;
struct stat statStruct;
if (argc < 2){
printf( "Nothing to do\n");
return -1;
}
if ((systemPath = getenv("PATH")) == NULL)
{
perror( "Not found PATH!\n ");
return -1;
}
fileName = argv[1];
printf("%s %s\n", systemPath, fileName);
while ((path = strsep(&systemPath, ":")) != NULL)
{
if ((stat(fileName, &statStruct) == 0) && S_ISREG(statStruct.st_mode) && (statStruct.st_mode & S_IRUSR))
{
printf("%s\n", fileName);
printf("%s\n", systemPath);
printf("%s\n", path);
}
}
return 0;
}
答案 0 :(得分:2)
您可以使用strsep
找到候选目录,并将其存储在path
中。但是你不要使用这个变量; stat
调用只使用基本文件名,因此将始终在当前工作目录中查找。
您需要形成path
,/
和文件名,然后是stat
的串联。
您可能会发现snprintf
有用。