1

入力で指定されたプログラムを実行する単純なシェル プログラムを作成しようとしています。主な機能には、(入力をトークンに分割するためにscanner()使用する) と(プロセスをフォークしてプログラムを実行する) の 2 つがあります。strtokexecute()

残念ながらうまくいきません...string[0]の最後scanner()と最初に印刷しようとしましたexecute()。1回目は正しい出力ですが、2回目string[]は一連の乱数で変更されているように見えるため、execvp()機能しません...

の値がstring[]変化する理由が本当にわかりません。おそらく非常にばかげたエラーですが、わかりません。私は本当にあなたの助けが必要です!アドバイスありがとう。

#include <unistd.h>
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <string.h>
#include <sys/wait.h>

#define DIM 256

int scanner(char*[]);
int execute(char*[]);

int main()
{
    char* string[DIM]; 

    scanner(string);
    execute(string);

}

/* scan:    read the input in token*/
int scanner(char* string[])
{
    char input[1024];
    char delimit[]=" \t\r\n\v\f"; 
    int i = 0;

    if(fgets(input, sizeof input, stdin)) {
        string[i] = strtok(input, delimit);
        while(string[i]!=NULL){
            i++;
            string[i]=strtok(NULL,delimit);
        }
        return 0;
    }
    return 1;
}
/* execute:    execute the command*/
int execute(char* string[])
{
    int pid;
    printf("%s\n", string[0]);
    switch(pid = fork()){
        case -1:
            return 1;
        case 0:
            execvp(string[0], string);
            return 1;
        default:
            wait((int*)0);
            return 0;
    }
}
4

1 に答える 1