「「fgets」を書き直してアラームを含め、5秒後にユーザーがデータを入力しなかった場合、「fgets」がNULLへのポインターを返すようにします(タイムアウト)」
大規模な宿題のこの1つの問題であり、信号、キャッチ、処理などを調べ始めたばかりです。そうは言っても、本と講義のスライドにはこれが欠けています...
このタイプの例外をキャッチするハンドラーを作成することを思いつき、アラームがどのように機能するかは理解していますが、インターフェイスがどのように機能するかはわかりません。
今「fgets」について考えているだけです...他のすべての作業が行われる前に(リターンポインタの直前に)アラームを入れるだけの場合:
char *fgets(//...//)
{
alarm(5);
char * to_return = NULL;
//...//
ユーザーがデータを入力する前にアラームが鳴った場合、ハンドラーは単に「NULLを返す」ことができますか?ハンドラーが完了した後、実行は「fgets」内に戻りませんか?ハンドラーが関数内で実行できること(つまり、関数に値を返すように強制すること、関数内で宣言されている変数を変更すること、別の関数呼び出しにジャンプさせること)に混乱していると思います。等。)