1

minix でいくつかのカーネル コードを変更する宿題をしようとしていますが、これまでに見たことのない奇妙な問題が発生しています。

pm サーバーの alloc.c を変更しています (minix に詳しい方向け)。ファイルの先頭にグローバル変数を追加しました。

PUBLIC int logging = 0;

その後、カーネルに追加した関数の 1 つで変数を読み取ろうとしています。

PUBLIC int do_setalloc(void)
{
  printf("logging = %i\n", logging");
  return (OK);
}

次に、カーネル空間の外でこのコードを実行するテスト プログラムを作成します。

int main(void)
{
  message m;
  m.m1_i1 = 1;
  m.m1_i2 = 1;
  _syscall(MM,69,&m);
  return 0;
}

これは、このコードが実行されたときの出力です。

logging = %i

Printf は実際には %i 書式設定を整数の実際の値に置き換えていません。私はここで髪を引き裂いています。この割り当ては間もなく行われます! ヘルプ!

4

2 に答える 2

3

「%i」は有効なフォーマット変換ではないと思いました。int を出力するために最も一般的に使用されるタグは "%d" です。しかし、先ほど見た printf マンページでは、%i は %d の同義語であると主張していました。おそらく、minix の printf はそれを定義していません。

于 2011-04-04T02:26:11.197 に答える
2

%dprintfの整数ではありませんか?

于 2011-04-04T02:25:43.817 に答える