Ticket #5108: main.cpp

File main.cpp, 1.5 KB (added by david.ibbitson@…, 12 years ago)

Program demonstrating Leopard sysctl bug.

Line 
1#include <iostream>
2#include "boost/interprocess/detail/tmp_dir_helpers.hpp"
3
4void print_boottime()
5{
6#ifdef BOOST_INTERPROCESS_HAS_BSD_KERNEL_BOOTTIME
7 int request[2] = { CTL_KERN, KERN_BOOTTIME };
8 struct ::timeval result;
9 size_t result_len = sizeof result;
10
11 if (::sysctl (request, 2, &result, &result_len, NULL, 0) < 0)
12 return;
13
14 std::cout << "Boot_time=" << result.tv_sec << "," << result.tv_usec << "\n";
15
16 std::string s;
17 bool add = false;
18
19 char bootstamp_str[256];
20
21 const char Characters [] =
22 { '0', '1', '2', '3', '4', '5', '6', '7'
23 , '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
24
25 std::size_t char_counter = 0;
26 long long fields[2] = { result.tv_sec, result.tv_usec };
27 for(std::size_t field = 0; field != 2; ++field){
28 for(std::size_t i = 0; i != sizeof(long long); ++i){
29 const char *ptr = (const char *)&fields[field];
30 bootstamp_str[char_counter++] = Characters[(ptr[i]&0xF0)>>4];
31 bootstamp_str[char_counter++] = Characters[(ptr[i]&0x0F)];
32
33 std::cout << "i=" << i << ",ptr[i]=" << ptr[i]
34 << ",char_counter=" << char_counter
35 << ",ptr[i]&0xF0 >> 4=" << ((ptr[i] & 0xF0) >> 4)
36 << ",ptr[i]&0x0F=" << (ptr[i] & 0x0F)
37 << "\n";
38 }
39 }
40 bootstamp_str[char_counter] = 0;
41 if(add){
42 s += bootstamp_str;
43 }
44 else{
45 s = bootstamp_str;
46 }
47
48 std::cout << "Bootstamp=" << s << "\n";
49#endif
50}
51
52int main(int argc, char *argv[])
53{
54 print_boottime();
55 return 0;
56}