以下是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;
}
答案 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”的文件。