-2

シグナルをキャッチ<ctrl> + <c>してリストを出力するプログラムを作成しましたが、コンパイル時のエラーが1つあり、それを乗り越えられないようです。私はこのエラーを受け取り続けます:

割り当てで`void()()'を`void(*)(int)'に変換できません

コンパイラによると、エラーは次のコード行で発生しています。

    handler.sa_handler = handle_SIGINT;

周囲のコードも次のとおりです。

cmdcounter = 1;

/*set up the signal handler*/
struct sigaction handler;
handler.sa_handler = handle_SIGINT;
sigaction(SIGINT, &handler, NULL);

strcpy(buffer, "Caught <ctrl><c>\n");

handle_SIGINTプログラムの前半で定義されています。

void handle_SIGINT()
{
    write(STDOUT_FILENO, buffer, strlen(buffer));

    // Print out last 10 commands that were used.
    printf("Most recent commands entered:\n");
    if(cmdcounter <= 10) {
        for (i=0; i < cmdcounter; i++) {
            printf("%d. %s\n", i+1, cmd[i]);
        }
    }
    else {
        for (i = cmdcounter-10; i < cmdcounter; i++) {
            printf("%d. %f\n", i, cmd[i]);
        }
    }
}

私にはすべてがうまく見えますが、何かが明らかにそうではありません。誰かがこのエラーをスローしているものを知っていますか?

4

2 に答える 2

4

あなたの機能handle_SIGINTは間違っています。

その機能を見せてください。そうすれば、それがどのように間違っているかを正確に伝えることができます。

handle_SIGINT次のように想定されています:

void handle_SIGINT(int){....}

intパーツをパラメータとして省略しました。

于 2012-05-25T22:09:44.260 に答える
3

エラーは、署名が一致しないことを示しています。handle_SIGINTする必要があります:

void handle_SIGINT(int ){ ... }
于 2012-05-25T22:10:24.697 に答える