0

以下は grub の main() のコードです。ここで私はこの行について知りたいです:

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;    
}
4

2 に答える 2

2

プログラムを呼び出す場合

プログラム arg1 arg2.txt 65

argv[1]へのポインタ"arg1"です。argv[2]へのポインタ、へ"arg2.txt"argv[3]ポインタ"65"argv[4]NULL

argv[0]は、バイナリ実行可能ファイルの呼び出しに使用される名前を OS および/またはライブラリおよび/またはスタートアップ コードが識別できない場合は、"program"またはそのいずれかを指します。""

特定のケースでは、プログラムは、プログラムの最初の引数で指定された名前のファイルをバイナリ読み取りモードで開こうとします。

于 2010-10-08T12:36:09.727 に答える
1

arg_vmain が呼び出されたときにプログラムに渡される文字列へのポインターの配列へのポインターです。arg_v[1]したがって、呼び出されたときにプログラムに渡される最初の文字列へのポインターです (配列は 0 から始まりますが、0 番目の要素はプログラム名そのものです)。

編集:具体的には、上記が as として呼び出される実行可能ファイルのメイン関数である場合、文字列「grub」をgrub foo bar指し、「foo」を指します。したがって、呼び出しは「foo」という名前のファイルを開こうとします。arg_v[0]arg_v[1]fopen

于 2010-10-08T12:36:00.520 に答える