0

いくつかの UNIX コマンドを実行するコードを実行しようとしています。これらのコマンドは配列 lineArray に格納されています。たとえば、次のようになります。lineArray = {"ls -l", "ls", "pwd", NULL};

問題は、関数が execvp MAN に従ってコマンドとその引数を正しく解析することをデバッグで見たにもかかわらず、このコードが配列の最初のコマンドのみを出力することです。

あらゆる種類の助けをいただければ幸いです。

int startProcesses(int background) {
int i = 0;
int j = 0;
int pid;
int status;
char *copyProcessName[256];
int len, var=0;

while(lineArray[i] != NULL) {

    while(*(copyProcessName+var) != NULL) {
        copyProcessName[var] = NULL;
    }

    j=0;
    copyProcessName[j] = strtok(lineArray[i], " ");
    while (copyProcessName[j] != NULL){
        j++;
        copyProcessName[j] = strtok(NULL, " ");
    }


    pid = fork();

    if (pid == 0) {
        // Child Process
        execvp(copyProcessName[0], copyProcessName);
        fflush(stdout);
        i++;
        continue;

    } else if (!background) {
        // Parent Process
        waitpid(pid, &status, 0);
        i++;
        if(WEXITSTATUS(status)) {
            printf(CANNOT_RUN_ERROR);
            return 1;
        }
    } else {
        i++;
        continue;
    }
}
return 0;

}

4

1 に答える 1