Запрос относительно main () GRUB - PullRequest
0 голосов
/ 08 октября 2010

Ниже приведен код main () grub. Здесь я хочу знать об этой строке:

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

Вот какой файл fopen открывается? На какой файл указывает этот аргумент 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 ]

2 голосов
/ 08 октября 2010

Если вы вызываете вашу программу с

program arg1 arg2.txt 65

argv[1] - указатель на "arg1"; argv[2] - это указатель на "arg2.txt", argv[3] - это указатель на "65", argv[4] равен NULL

argv [0] либо указывает на "program", либо на "", если ОС, и / или библиотека, и / или код запуска не могут определить имя, используемое для вызова двоичного исполняемого файла

В вашем конкретном случае программа пытается открыть файл, имя которого указано в первом аргументе программы, в режиме чтения двоичных файлов.

1 голос
/ 08 октября 2010

arg_v - указатель на массив указателей на строки, передаваемые программе при вызове main.arg_v[1], следовательно, является указателем на первую строку, переданную программе, когда она вызывается (даже если массив начинается с 0; 0-й элемент - это само имя программы).: Если быть конкретным, то, что выше является основной функцией исполняемого файла, вызываемого как grub foo bar, тогда arg_v[0] указывает на строку "grub" и arg_v[1] указывает на "foo"Следовательно, вызов fopen попытается открыть файл с именем "foo".

...