2016-09-24 68 views
0

printf(* arg); execvp(* arg,arg);
這裏printf()語句打印值= ls.But當運行程序execvp給出沒有這樣的文件或目錄。 否則如果(PID == 0){使用fork製作簡單的unix外殼,execvp

printf(*arg); 
    execvp(*arg, arg); 

    char* error = strerror(errno); 
    printf("shell: %s: %s\n", arg[0], error); 
    return 0; 
    if(execvp(arg[0], arg)<0) 
    { 
    printf("***ERROR: execution failedn\n"); 
    } 
    return 0; 
} 
+1

你能告訴我們第二個printf的輸出在哪裏打印'arg [0]'?編寫shell時常見的錯誤是忘記修改從用戶讀取的輸入行末尾的換行符。 –

回答

0

在下面的代碼是如何使用execvp兩個例子。

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

int main(int argc, char **argv) { 
    char *args[] = {"ls", "-l", NULL}; 

    /* an example with a decleared array containing the commande */ 
    if (fork() == 0) { 
     execvp(args[0], args); 
    } 

    /* another example where the commande was passed to main */ 
    printf("argv[0] is the programme/executable name!\nargv[0] = %s\n", argv[0]); 
    if (fork() == 0) { 
     execvp(argv[1], argv + 1); 
    } 

    return EXIT_SUCCESS; 
} 

execv()execvp(),和execvpe()函數提供的 指針的數組,以NULL結尾的代表參數列表 可用於新節目的字符串。

按照慣例,第一個參數 應該指向文件名爲的文件正在執行。 指針數組必須由空指針終止。