1 #include <sys/resource.h>
15 static bool *enable_run;
16 static int grace_time;
19 size_t CopyFile(FILE *source,FILE *dest)
24 while((len = fread(buf,
sizeof(
char),256,source)) > 0){
25 fwrite(buf,
sizeof(
char),len,dest);
32 void HandleStop(
int i)
37 if(enable_run) *enable_run =
false;
40 void HandleAlarm(
int i)
46 void InitHandleStop(
bool *_enable_run,
int _grace_time)
48 enable_run = _enable_run;
49 grace_time = (_grace_time > 0)? _grace_time : 1;
52 signal(SIGINT,HandleStop);
53 signal(SIGALRM,HandleAlarm);
56 bool Renice(
int nice,
bool verbose)
58 int old_prio = getpriority(PRIO_PROCESS,0);
59 setpriority(PRIO_PROCESS,0,nice);
60 int new_prio = getpriority(PRIO_PROCESS,0);
62 if(verbose && new_prio!=old_prio){
63 printf(
"renice: %d -> %d\n",old_prio,new_prio);
65 return(new_prio == nice);
72 date.printf(
"%04d%02d%02d-%02d%02d",
73 1900+cur.tm_year, cur.tm_mon+1, cur.tm_mday,
74 cur.tm_hour, cur.tm_min);
77 bool SetTimerInterrupt(
unsigned int interval,
void (*callback)(
int))
79 struct itimerval value, ovalue, pvalue;
80 struct sigaction sact;
82 value.it_interval.tv_sec = 0;
83 value.it_interval.tv_usec = interval;
84 value.it_value.tv_sec = 0;
85 value.it_value.tv_usec = interval;
87 sigemptyset( &sact.sa_mask );
89 sact.sa_handler = callback;
90 sigaction( SIGALRM, &sact, NULL );
92 getitimer( ITIMER_REAL, &pvalue );
93 setitimer( ITIMER_REAL, &value, &ovalue );
95 if( ovalue.it_interval.tv_sec != pvalue.it_interval.tv_sec ||
96 ovalue.it_interval.tv_usec != pvalue.it_interval.tv_usec ||
97 ovalue.it_value.tv_sec != pvalue.it_value.tv_sec ||
98 ovalue.it_value.tv_usec != pvalue.it_value.tv_usec ){
104 void CancelTimerInterrupts()
106 struct itimerval value;
107 int whichTimer = ITIMER_REAL;
108 getitimer( whichTimer, &value );
109 value.it_value.tv_sec = 0;
110 value.it_value.tv_usec = 0;
111 setitimer( whichTimer, &value, NULL );