alarm()関数を使用できるはずです。 unistd.hにありますが、これはPOSIX.1-2001の関数であり、cygwinで利用できるはずです。 SIGALRMが処理されない場合、プロセスは強制終了されます。
それを試してみてください。
#include <stdio.h>
#include <unistd.h>
int main() {
alarm(5); /* raise alarm after 5 seconds */
while(1) {
printf("Running forever\n");
}
return 0; /* never reached */
}
更新
ジョナサンが指摘するように、あなたが代わりに(また、POSIXに準拠)をsetitimerが使用できるようアラーム(2)はわずか数秒で動作
#include <stdio.h>
#include <sys/time.h>
int main() {
/* --CUT HERE-- */
struct itimerval timer;
timer.it_value.tv_sec = 0;
timer.it_value.tv_usec = 5000; /* 5 milliseconds */
timer.it_interval.tv_sec = 0;
timer.it_interval.tv_usec = 0;
setitimer(ITIMER_REAL, &timer, NULL);
/* --END CUT-- */
while(1) {
printf("Running forever\n");
}
return 0; /* never reached */
}
場合あなたのシステム上で上記の作品、 コピーコードから - ここにカットして - あなたのメインに貼り付ける;
は、あなたのシステムがPOSIX 2008ノートからnanosleep()
それを持っているかどうかを調査することをお勧めします例
タイマーを使い、タイマーが切れるとプログラムを 'abort()'または 'exit()'するだけです。 –
この方法でバッファオーバーランを防止することはできません。バッファオーバーランを実際に制限するには、 '-fstack-protector-all'フラグを付けてCソースをコンパイルする必要があります。 –
@Als私はCプログラムでタイマーを使うことができませんコンパイル時やPHPスクリプトで処理する必要があります –