查询GRUB的main()

时间:2010-10-08 12:28:42

标签: c fopen grub

以下是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 个答案:

答案 0 :(得分:2)

如果您使用

致电您的计划
program arg1 arg2.txt 65

argv[1]是指向"arg1"的指针; argv[2]是指向"arg2.txt"的指针,argv[3]是指向"65"的指针,argv[4]是NULL

如果操作系统和/或库和/或启动代码无法识别用于调用二进制可执行文件的名称,则

argv [0]指向"program"""

在您的特定情况下,程序会尝试以读取二进制模式打开一个文件,该文件的名称在程序的第一个参数中提供。

答案 1 :(得分:1)

arg_v是指向调用main时传递给程序的字符串指针数组的指针。因此,arg_v[1]是指向调用时传递给程序的第一个字符串的指针(即使数组从0开始;第0个元素是程序名称本身)。

编辑:具体来说,如果以上是作为grub foo bar调用的可执行文件的主要功能,则arg_v[0]指向字符串“grub”和{ {1}}指向“foo”。因此arg_v[1]调用将尝试打开名为“foo”的文件。