シェルの作り方の基礎は大昔にやりましたが、でも今コードに落せるかといわれると
ちょっと微妙です。そこで、ゆっくり復習しようとおもってます。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include <dirent.h> #include <unistd.h> char* getPath(); char* searchFile(char *, char*); char* searchBin(char *); main() { char *pathStr, *path; char *binpath; pathStr = getPath(); int i; binpath = searchBin("ls"); if(binpath != NULL) { printf("ls bin -> %s\n", binpath); } return 0; } char* getPath() { return getenv("PATH"); } //もし発見できたら、そのファイルのパスを返す char* searchFile(char *dirpath, char *filename) { DIR *dp = opendir(dirpath); struct dirent *dirst; char *binpath = NULL; char *fpath = NULL; if(dp == NULL) { fprintf(stderr, "Error: failed to open directory: %s\n", dirpath); return false; } while((dirst = readdir(dp)) != NULL) { if (strcmp(filename, dirst->d_name) == 0) { fpath = (char *)malloc(sizeof(char) * (strlen(dirpath) + strlen(filename))); sprintf(fpath, "%s/%s", dirpath, dirst->d_name); } } return fpath; } char* searchBin(char *binname) { char* binpath = NULL; char *pathStr, *path; for(pathStr = getPath(), path = strtok(pathStr, ":"); path != NULL; path = strtok(NULL, ":")) { if((binpath = searchFile(path, binname)) != NULL) break; } return binpath; }