| | 94 | ==== Step1. 修改hello.c ==== |
| | 95 | {{{ |
| | 96 | #!text |
| | 97 | /* hello.c: A program to show the time since the Epoch */ |
| | 98 | |
| | 99 | #include <stdio.h> |
| | 100 | #include <sys/time.h> |
| | 101 | |
| | 102 | int main(int argc, char* argv[]) |
| | 103 | { |
| | 104 | double sec; |
| | 105 | struct timeval tv; |
| | 106 | |
| | 107 | gettimeofday(&tv, NULL); |
| | 108 | sec = tv.tv_sec; |
| | 109 | sec += tv.tv_usec / 1000000.0; |
| | 110 | |
| | 111 | printf("%f\n", sec); |
| | 112 | |
| | 113 | return 0; |
| | 114 | } |
| | 115 | }}} |
| | 116 | |
| | 117 | ==== Step2. 更新設定檔 === |
| | 118 | {{{ |
| | 119 | $ autoscan |
| | 120 | $ mv configure.scan configure.ac |
| | 121 | $ autoconf |
| | 122 | $ autoheader |
| | 123 | $ ./configure |
| | 124 | }}} |
| | 125 | |
| | 126 | ==== Step3. 修改source code使其支援protable ==== |
| | 127 | {{{ |
| | 128 | #!text |
| | 129 | /* hello.c: A program to show the time since the Epoch */ |
| | 130 | |
| | 131 | #include <stdio.h> |
| | 132 | #include "config.h" |
| | 133 | |
| | 134 | #ifdef HAVE_SYS_TIME_H |
| | 135 | #include <sys/time.h> |
| | 136 | #else |
| | 137 | #include <time.h> |
| | 138 | #endif |
| | 139 | |
| | 140 | double get_sec_since_epoch() |
| | 141 | { |
| | 142 | double sec; |
| | 143 | |
| | 144 | #ifdef HAVE_GETTIMEOFDAY |
| | 145 | struct timeval tv; |
| | 146 | |
| | 147 | gettimeofday(&tv, NULL); |
| | 148 | sec = tv.tv_sec; |
| | 149 | sec += tv.tv_usec / 1000000.0; |
| | 150 | #else |
| | 151 | sec = time(NULL); |
| | 152 | #endif |
| | 153 | |
| | 154 | return sec; |
| | 155 | } |
| | 156 | |
| | 157 | int main(int argc, char* argv[]) |
| | 158 | { |
| | 159 | printf("%f\n", get_sec_since_epoch()); |
| | 160 | |
| | 161 | return 0; |
| | 162 | } |
| | 163 | }}} |
| | 164 | |
| | 165 | ==== Step4. 編譯及執行 ==== |
| | 166 | {{{ |
| | 167 | $ autoscan |
| | 168 | $ ./configure |
| | 169 | $ make clean all |
| | 170 | $ ./hello |
| | 171 | }}} |
| | 172 | |