簡體   English   中英

execvp() 不會加載文件:“沒有這樣的文件或目錄”

[英]execvp() wont load file: “No such file or directory”

我寫了2個程序。 第一個通過 argv 獲取 2 個字符串並打印程序進程 id 和最小的字符串(按字典順序)。

int main(int argc,char **argv) {
    int cmp;
    if (argc != 3){
        perror("Wrong arguments");
        exit(EXIT_FAILURE);

    }
    printf("my ID: %d\n",getpid());
    cmp = strcmp(argv[1],argv[2]);
    if (cmp < 0)
        puts(argv[1]);

    else if (cmp > 0)
        puts(argv[2]);

    else puts(argv[1]);

    exit(EXIT_SUCCESS);
}

我已經通過終端編譯了代碼:

gcc -Wall my_cmp.c -o my_cmp

第二個程序創建一個子進程並使用my_cmp發送“abc”“de”執行execvp()

void do_sun(char **argv);

int main() {
    pid_t status;
    char *args[] = { "my_cmp", "abc","de", NULL };

    status = fork();

    if (status < 0){
        perror("Cannot fork");
        exit(EXIT_FAILURE);
    }
    if (status == 0){
        char *args[] = { "my_cmp", "abc","de", NULL };
        do_sun(args);
        exit(EXIT_SUCCESS);
    }

    if (status > 0){
        wait(&status);
        if (execvp(args[0],args) != 0 )
            perror("error");
        exit(EXIT_SUCCESS);
    }
    exit(EXIT_SUCCESS);
}

void do_sun(char **args){
    if (execvp(args[0],args) == -1 )
                perror("error");
    exit(EXIT_SUCCESS);
}

當我運行程序時,我收到以下消息:

error: No such file or directory
error: No such file or directory

我試圖將目錄切換到 my_cmp 文件,但沒有成功。

在某些系統上,默認情況下它不會在工作目錄中搜索可執行二進制文件。

您應該使用./my_cmp而不是my_cmp讓它在這樣的系統上工作。

如果您使用execv p ,則表示將在“路徑中”找到可執行文件; 也就是說,在$PATH中列出的目錄之一中。 這條路徑上很少有目錄,雖然可以添加. $PATH ,這通常被認為是一個安全漏洞。

如果要指定可執行文件的路徑(在這種情況下,您可以將其放在您想要的任何目錄中),請使用非路徑execv

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM