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