1. ホーム
  2. c

[解決済み] execvp()の使用方法

2022-03-04 18:37:25

質問

ユーザーが行を読み、私は最初の単語をexecvpのコマンドとして保持します。

例えば、次のように入力するとします。 "cat file.txt" ... コマンドは、cat になります。しかし、私はこれをどのように使用するかがわからない execvp() いくつかのチュートリアルを読みましたが、まだ理解できていません。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char *buf;
    char command[32];
    char name[32];
    char *pointer;
    char line[80];
    printf(">");

    while((buf = readline(""))!=NULL){   
        if (strcmp(buf,"exit")==0)
        break;

        if(buf[0]!=NULL)
        add_history(buf);

        pointer = strtok(buf, " ");
        if(pointer != NULL){
            strcpy(command, pointer);
        }

        pid_t pid;

        int  status;

        if ((pid = fork()) < 0) {     
            printf("*** ERROR: forking child process failed\n");
            exit(1);
        }
        else if (pid == 0) {          
            if (execvp(command, buf) < 0) {     
                printf("*** ERROR: exec failed\n");
                exit(1);
            }
        }
        else                                  
        while (wait(&status) != pid)       
            ;
        free(buf);
        printf(">");
    }///end While
    return 0;
}

解決方法は?

で指定したファイルへの適切な引数を表すヌル文字で終端する文字列の配列です。 マニュアルページ .

例えば

char *cmd = "ls";
char *argv[3];
argv[0] = "ls";
argv[1] = "-la";
argv[2] = NULL;

execvp(cmd, argv); //This will run "ls -la" as if it were a command