0

私は自分自身への演習として単純なシェルを実行しようとしています。PATH で実行可能ファイルを検索し、実行可能ファイルへのフル パスを含む文字列へのポインターを返す関数を作成しています。これが私がこれまでに持っているものです。

/*bunch of includes here*/

/*
 * Find executable in path, return NULL
 * if can't find.
 */
char *find_executable(char *command)
{
    const char *PATH = getenv("PATH");
    DIR *dp;
    /* get each pathname, and try to find executable in there. */
}

int main(int argc,char *argv[])
{ /* nothing intersting here ...*/
}

パスの各部分をどのように分離し、これらの部分を for ループで処理する必要があるのか​​ 疑問に思っていました。

4

1 に答える 1

3

パスは ; で区切られると言います。
strtok 関数を使用して、分割されたトークンを生成できます。
例えば

char *str = "/foo/a1/b1;/bar/a1/b1"

strtok 関数を次のように使用できるようになりました

char delims[] = ";"  
char *result = NULL;  
result = strtok( str, delims );  
while( result != NULL ) {  
    dp = result;  
    result = strtok( NULL, delims );   
}
于 2012-05-20T06:08:57.783 に答える