私は、がsystem()関数を使用していないというシェルプログラムを書く必要があります。特徴の1つは、ワイルドカードを使用できることです。グロブを使用する方法やfnmatchの機能を使用する方法の良い例を見つけることができないように見えませんので、私は迷っています。これまでのところ私はいくつかのブログ機能を持っていますコード)。カスタムシェルのglob問題
glob変数がグローバルとして宣言されている場合、関数は部分的に機能します。ただし、その後のコマンドではエラーが発生します。例:
ls *.c
produce correct results
ls -l //no glob required
null passed through
だから私はそれをローカル変数にしようとしました。
int runCommand(commandStruct * command1) {
if(!globbing)
execvp(command1->cmd_path, command1->argv);
else{
glob_t globbuf;
printf("globChar: %s\n", globChar);
glob(globChar, GLOB_DOOFFS, NULL, &globbuf);
//printf("globbuf.gl_pathv[0]: %s\n", &globbuf.gl_pathv[0]);
execvp(command1->cmd_path, &globbuf.gl_pathv[0]);
//globfree(&globbuf);
globbing = 0;
}
return 1;
}
地元としてglobbufでこれをやって、それがglobbuf.gl_pathにnullを生成します[0]:これが今の私のコードです。理由を理解できないようだ。どのようにglobの作品が原因であるかもしれないか知っている人は誰ですか?必要に応じてさらにコードを投稿することができますが、これは問題がある場所です。
マニュアルページによると、 'glob()'はすでにヌルポインタでバッファを送信しています。 – Ariel