2010-10-08 68 views
0

以下是grub的main()的代碼。在這裏我想知道這條線:關於GRUB的main()的查詢

file = fopen(arg_v [1],「rb」);

fopen打開的文件在哪裏?這個arg v [1]指向哪個文件?

int main(unsigned arg_c, char *arg_v[])  
{  
    FILE *file;  

    if(arg_c < 2)  
    {  
     printf("Checks if file is Multiboot compatible\n");  
     return 1;  
    }  
    file = fopen(arg_v[1], "rb");  
    if(file == NULL)  
    {  
     printf("Can't open file '%s'\n", arg_v[1]);  
     return 2;  
    }  
    check_multiboot(arg_v[1], file);  
    fclose(file);  
    return 0;  
} 

回答

2

如果你打電話給你的程序與

program arg1 arg2.txt 65

argv[1]是一個指向"arg1"; argv[2]是一個指向"arg2.txt"argv[3]是一個指向"65"argv[4]是NULL

的argv [0]任一指向 "program"""如果和/或圖書館和/或啓動代碼不能識別名中使用的OS

調用二進制可執行文件

在您的特定情況下,程序嘗試在讀取二進制模式下打開一個文件,該文件的名稱在程序的第一個參數中提供。

+0

變量的通常名稱是'argc'和'argv'。 **給他們其他名字沒有任何錯誤**,它只是使它不尋常*而且不尋常的不好* – pmg 2010-10-08 12:41:27

+0

謝謝,我明白了。 – narayanpatra 2010-10-08 12:56:14

1

arg_v是指向指針數組傳遞給程序被調用時主弦。因此,arg_v[1]是調用時傳遞給程序的第一個字符串的指針(即使數組從0開始;第0個元素是程序名稱本身)。

編輯:所以要混凝土,如果上面援引作爲grub foo bar可執行的主要功能,然後arg_v[0]指向字符串「平頭」和arg_v[1]指向「foo」的。因此,fopen調用將嘗試打開名爲「foo」的文件。