00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "defs.h"
00022
00023
00024
00025
00026
00027
00028
00029 #if _POSIX_TIMERS > 0 && !defined(LINUX)
00030
00031 #include <sys/time.h>
00032
00033
00034 void handler(int signum)
00035 {
00036 write(STDOUT_FILENO, "\nX\n", 3);
00037 }
00038
00039 void timer_try1(void)
00040 {
00041 struct sigaction act;
00042 struct itimerval itv;
00043 char buf[100];
00044 ssize_t nread;
00045
00046 memset(&act, 0, sizeof(act));
00047 act.sa_handler = handler;
00048 ec_neg1( sigaction(SIGALRM, &act, NULL) )
00049 memset(&itv, 0, sizeof(itv));
00050 itv.it_interval.tv_sec = 2;
00051 itv.it_value.tv_sec = 2;
00052 ec_neg1( setitimer(ITIMER_REAL, &itv, NULL) )
00053 while (true) {
00054 switch( nread = read(STDIN_FILENO, buf, sizeof(buf) - 1) ) {
00055 case -1:
00056 EC_FAIL
00057 case 0:
00058 printf("EOF\n");
00059 break;
00060 default:
00061 if (nread > 0)
00062 buf[nread] = '\0';
00063 ec_neg1( write(STDOUT_FILENO, buf, strlen(buf)) )
00064 continue;
00065 }
00066 break;
00067 }
00068 return;
00069
00070 EC_CLEANUP_BGN
00071 EC_FLUSH("timer_try1")
00072 EC_CLEANUP_END
00073 }
00074
00075 void timer_try2(void)
00076 {
00077 struct sigaction act;
00078 struct itimerval itv;
00079 char buf[100];
00080 ssize_t nread;
00081
00082
00083 memset(&act, 0, sizeof(act));
00084 act.sa_handler = handler;
00085 act.sa_flags = SA_RESTART;
00086 ec_neg1( sigaction(SIGALRM, &act, NULL) )
00087
00088 memset(&itv, 0, sizeof(itv));
00089 itv.it_interval.tv_sec = 2;
00090 itv.it_value.tv_sec = 2;
00091 ec_neg1( setitimer(ITIMER_REAL, &itv, NULL) )
00092 while (true) {
00093 switch( nread = read(STDIN_FILENO, buf, sizeof(buf) - 1) ) {
00094 case -1:
00095 EC_FAIL
00096 case 0:
00097 printf("EOF\n");
00098 break;
00099 default:
00100 if (nread > 0)
00101 buf[nread] = '\0';
00102 ec_neg1( write(STDOUT_FILENO, buf, strlen(buf)) )
00103 continue;
00104 }
00105 break;
00106 }
00107 return;
00108
00109 EC_CLEANUP_BGN
00110 EC_FLUSH("timer_try2")
00111 EC_CLEANUP_END
00112 }
00113
00114 void clocks(void)
00115 {
00116 struct timespec ts;
00117 time_t tm;
00118
00119 ec_neg1( time(&tm) )
00120 printf("time() Time: %ld secs.\n", (long)tm);
00121 printf("CLOCK_REALTIME:\n");
00122 ec_neg1( clock_gettime(CLOCK_REALTIME, &ts) )
00123 printf("Time: %ld.%09ld secs.\n", (long)ts.tv_sec, (long)ts.tv_nsec);
00124 ec_neg1( clock_getres(CLOCK_REALTIME, &ts) )
00125 printf("Res.: %ld.%09ld secs.\n", (long)ts.tv_sec, (long)ts.tv_nsec);
00126 return;
00127
00128 EC_CLEANUP_BGN
00129 EC_FLUSH("clocks")
00130 EC_CLEANUP_END
00131 }
00132
00133 int main(void)
00134 {
00135 clocks();
00136 exit(EXIT_SUCCESS);
00137 }
00138
00139 #else
00140
00141 int main(void)
00142 {
00143 printf("Not supported.\n");
00144 exit(1);
00145 }
00146
00147 #endif