0

下面是 grub 的 main() 代码。在这里我想知道这条线:

文件 = 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;    
}
4

2 回答 2

2

如果你调用你的程序

程序 arg1 arg2.txt 65

argv[1]是一个指针"arg1"argv[2]是指向 的指针是指向"arg2.txt"argv[3]指针"65"argv[4]​​NULL

argv[0] 指向"program"或指向""操作系统和/或库和/或启动代码是否无法识别用于调用二进制可执行文件的名称

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

于 2010-10-08T12:36:09.727 回答
1

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

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

于 2010-10-08T12:36:00.520 回答