簡體   English   中英

Unix編程…fork()和execv()幫助…C編程

[英]Unix programming… fork() & execv() help… C Programming

我正在編寫自己的unix終端,並且在執行命令時遇到問題:

首先,我將用戶輸入內容存儲到緩沖區中,然后將單詞分開並將其存儲到argv []數組中。 即命令是“ firefox”以啟動存儲在argv [0]中的firefox

如何啟動命令? 這是我想要做的,但出現錯誤:

void launchProcess(char *command[], char *file){
        pid_t pid;
        pid = fork();
        if (pid == -1) {
                perror("Error when forking");
                exit(EXIT_FAILURE);
        }
        if (pid == 0){                  
                fprintf(stderr, "Child pid = %d\n", getpid());
                execv(file, command);
            }

當我打電話時:

launchProcess(commandArgv, "STANDARD");

我收到以下錯誤:錯誤:launchProcess的類型沖突

如果發生沖突的類型錯誤,則應確保列出的函數與其聲明的類型相同。

另外,您可能已經知道,但是execv需要可執行文件的完全限定路徑,因此“ STANDARD”之類的值將不起作用。 如果希望它使用PATH變量來確定二進制文件的位置,請使用execvp 您還應該確保argv數組中的最后一個值為NULL 最后,確保檢查execv的返回值; 有一定的可能性會失敗,例如,如果用戶嘗試執行一個不存在的程序。

您需要對該函數進行原型設計:添加“ void launchProcess(char * command [],char * file);” 在您的主要功能之上。

您的數據類型看起來正確,但是基於參數名稱:“ file”和“ command”,看來您可能以錯誤的方式使用了該函數。

這是不帶參數執行ls函數的示例。

char * args [] = {NULL}; execv(“ / bin / ls”,args);

這些關於exec和wait的注釋可能會有所幫助。

暫無
暫無

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

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