fork download
  1. //#define _GNU_SOURCE
  2.  
  3. #include <string>
  4. #include <stdio.h>
  5.  
  6.  
  7. #define DWORD_ unsigned int
  8.  
  9. #ifdef WIN32
  10. #include <Windows.h>
  11. #include <conio.h>
  12. #endif
  13.  
  14. #include <vector>
  15. #include <memory>
  16.  
  17. #include <boost/thread.hpp>
  18. #include <boost/multi_array.hpp>
  19. #include<fstream>
  20. #include<iostream>
  21.  
  22. #ifndef WIN32
  23. #include <sys/stat.h>
  24. #include <fcntl.h>
  25. #include <stdlib.h>
  26. #include <time.h>
  27. #include <stdio.h>
  28. #include <unistd.h>
  29. #include <sys/mman.h>
  30. #include <pthread.h>
  31. #include <sched.h>
  32. #include <aio.h>
  33. #include <signal.h>
  34. #endif
  35.  
  36.  
  37. #pragma commenct (lib, "rt.lib")
  38.  
  39. //########## samplethread.cpp 파일 #########
  40.  
  41.  
  42.  
  43.  
  44.  
  45. //void Aio_completion_handler( int signo, siginfo_t *info, void *context);
  46. //void Aio_completion_handler2( int signo, siginfo_t *info, void *context);
  47. void Callback_aio_completion_handler(sigval_t sigval);
  48.  
  49.  
  50. #define df_aiocb aiocb
  51.  
  52.  
  53. class CSampleThread
  54. {
  55.  
  56. public:
  57.  
  58.  
  59. /// DMA thread.
  60. std::shared_ptr<boost::thread> m_IOThread;
  61.  
  62. /// DMA thread functor.
  63. struct Runner;
  64. std::shared_ptr<Runner> m_IORunner;
  65.  
  66.  
  67. /// DMA thread.
  68. std::shared_ptr<boost::thread> m_IOThread2;
  69.  
  70. /// DMA thread functor.
  71. struct Runner2;
  72. std::shared_ptr<Runner2> m_IORunner2;
  73.  
  74.  
  75. // static int temp;
  76. static char * test_buf;
  77. //const unsigned long long size = 8ULL * 1024ULL * 1024ULL;
  78.  
  79. FILE * output;
  80. //fstream dataFile;
  81. clock_t t;
  82.  
  83. bool B_Start[8];
  84. float time;
  85.  
  86. unsigned long long WSpeed[8];
  87. unsigned long long second_keep;
  88. unsigned long long dur;
  89. unsigned long long start_dur;
  90. unsigned long long end_dur;
  91. unsigned long long single_buffer;
  92. unsigned long long v2_single_buffer;
  93.  
  94. ~CSampleThread();
  95. static void Aio_completion_handler( int signo, siginfo_t *info, void *context );
  96. static void Aio_completion_handler2( int signo, siginfo_t *info, void *context );
  97. void Signal_aio_init();
  98. void Signal_aio_init2();
  99. void My_aio_write();
  100. void Init();
  101. void Init2();
  102.  
  103.  
  104. int hFile[8];
  105. int hFile__;
  106.  
  107.  
  108. std::string fname;
  109. std::string name;
  110. std::string d_name[8];
  111.  
  112. int i_numBuffer;
  113. int i_numThread;
  114. int i_fileSize;
  115. unsigned long long n_fileSizeByte;
  116. unsigned long long datasize;
  117. unsigned long long secdatasize;
  118. std::vector<char*> buffer;
  119.  
  120. char* v_buffer;
  121. char* v2_buffer;
  122. void *addr = NULL;
  123.  
  124.  
  125. //void* v_buffer;
  126. char* c_buffer;
  127.  
  128. long long m_count[8];
  129. long long total_count[8];
  130. float SLEEP;
  131. unsigned long long result;
  132.  
  133. //bool m_flag = false;
  134.  
  135. int aio_flg;
  136.  
  137. char * buf;
  138. int retval;
  139. ssize_t nbytes;
  140. //int mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
  141.  
  142. struct sigaction sig_act;
  143. struct sigaction sig_act2;
  144. static struct aiocb my_aiocb;
  145. static struct aiocb my_aiocb2;
  146.  
  147. //main.cpp:143:18: error: invalid use of 'struct aiocb' with a zero-size array in 'class CSampleThread' [-Wpedantic]
  148. // struct aiocb my_aiocb;
  149.  
  150. };
  151.  
  152. struct CSampleThread::Runner
  153. {
  154. CSampleThread* sampleThread;
  155. Runner(CSampleThread* r)
  156. : sampleThread(r)
  157. {
  158.  
  159. }
  160.  
  161. /**
  162.   * operator() is the implementation of the device running logic.
  163.   */
  164. //commit test
  165. void operator()()
  166. {
  167. sampleThread->Signal_aio_init();
  168. }
  169. };
  170.  
  171. struct CSampleThread::Runner2
  172. {
  173. CSampleThread* sampleThread2;
  174. Runner2(CSampleThread* r)
  175. : sampleThread2(r)
  176. {
  177.  
  178. }
  179.  
  180. /**
  181.   * operator() is the implementation of the device running logic.
  182.   */
  183. //commit test
  184. void operator()()
  185. {
  186. sampleThread2->Signal_aio_init2();
  187. }
  188. };
  189.  
  190.  
  191.  
  192.  
  193. CSampleThread::~CSampleThread()
  194. {
  195. //fclose(output);
  196. }
  197.  
  198.  
  199. void CSampleThread::Init()
  200. {
  201. m_IORunner = std::shared_ptr<Runner>(new Runner(this));
  202. m_IOThread = std::shared_ptr<boost::thread>(new boost::thread(boost::ref(*m_IORunner)));
  203.  
  204. }
  205.  
  206. void CSampleThread::Init2()
  207. {
  208. m_IORunner2 = std::shared_ptr<Runner2>(new Runner2(this));
  209. m_IOThread2 = std::shared_ptr<boost::thread>(new boost::thread(boost::ref(*m_IORunner2)));
  210. }
  211.  
  212.  
  213.  
  214. void CSampleThread::Signal_aio_init()
  215. {
  216. int fd;
  217. // const int temp = 1024*512;
  218. int ret;
  219.  
  220. ret = 0;
  221.  
  222. char * buf[1024*512];
  223. //char * buf;
  224. //buf = new char[512*KB];
  225.  
  226. bzero((char *)&my_aiocb, sizeof(struct aiocb));
  227. //memset(buf, 0, 1024);
  228. memset(&buf[0], 0, 1024*512);
  229.  
  230. //file
  231. mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
  232. char * name = (char*)"//media/z87c/Data/AIO_test1.txt";
  233. fd = open(name, O_CREAT |O_APPEND | O_WRONLY | O_TRUNC | O_DIRECT , mode );
  234.  
  235. /* Set up the signal handler */
  236. sigemptyset(&sig_act.sa_mask);
  237. sig_act.sa_flags = SA_SIGINFO;
  238. sig_act.sa_sigaction = Aio_completion_handler;
  239.  
  240.  
  241. /* Set up the AIO request */
  242. bzero( (char *)&my_aiocb, sizeof(struct aiocb) );
  243. my_aiocb.aio_fildes = fd;
  244. my_aiocb.aio_buf = buf;
  245. my_aiocb.aio_nbytes = 1024*512;
  246. my_aiocb.aio_offset = 0;
  247.  
  248. /* Link the AIO request with the Signal Handler */
  249. my_aiocb.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
  250. my_aiocb.aio_sigevent.sigev_signo = SIGIO;
  251. my_aiocb.aio_sigevent.sigev_value.sival_ptr = &my_aiocb;
  252.  
  253. /* Map the Signal to the Signal Handler */
  254. ret = sigaction( SIGIO, &sig_act, NULL );
  255.  
  256. ret = aio_write( &my_aiocb );
  257. }
  258.  
  259.  
  260. void CSampleThread::Signal_aio_init2()
  261. {
  262. int fd;
  263. // const int temp = 1024*256;
  264. int ret;
  265.  
  266. ret = 0;
  267.  
  268. char * buf[1024*512];
  269.  
  270. bzero((char *)&my_aiocb2, sizeof(struct aiocb));
  271. memset(buf, 0, 1024*512);
  272.  
  273. //file
  274. mode_t mode = S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH;
  275. char * name = (char*)"//media/z87c/Data/AIO_test2.txt";
  276. fd = open(name, O_CREAT |O_APPEND | O_WRONLY | O_TRUNC | O_DIRECT , mode );
  277.  
  278. /* Set up the signal handler */
  279. sigemptyset(&sig_act2.sa_mask);
  280. sig_act2.sa_flags = SA_SIGINFO;
  281. sig_act2.sa_sigaction = Aio_completion_handler2;
  282.  
  283.  
  284. /* Set up the AIO request */
  285. bzero( (char *)&my_aiocb2, sizeof(struct aiocb) );
  286. my_aiocb2.aio_fildes = fd;
  287. my_aiocb2.aio_buf = buf;
  288. my_aiocb2.aio_nbytes = 1024*512;
  289. my_aiocb2.aio_offset = 0;
  290.  
  291. /* Link the AIO request with the Signal Handler */
  292. my_aiocb2.aio_sigevent.sigev_notify = SIGEV_SIGNAL;
  293. my_aiocb2.aio_sigevent.sigev_signo = SIGIO;
  294. my_aiocb2.aio_sigevent.sigev_value.sival_ptr = &my_aiocb2;
  295.  
  296. /* Map the Signal to the Signal Handler */
  297. ret = sigaction( SIGIO, &sig_act2, NULL );
  298.  
  299. ret = aio_write( &my_aiocb2 );
  300. }
  301.  
  302.  
  303. //void CSampleThread::My_aio_write()
  304. //{
  305. // ret = aio_write( &my_aiocb );
  306. //}
  307.  
  308.  
  309. void CSampleThread::Aio_completion_handler( int signo, siginfo_t *info, void *context )
  310. {
  311. struct aiocb *req;
  312. int ret = 0;
  313.  
  314. /* Ensure it's our signal */
  315. if (info->si_signo == SIGIO)
  316. {
  317.  
  318. req = (struct aiocb *)info->si_value.sival_ptr;
  319.  
  320. /* Did the request complete? */
  321. if (aio_error( req ) == 0)
  322. {
  323. //req->aio_buf = buf;
  324. /* Request completed successfully, get the return status */
  325. //ret = aio_return( req );
  326.  
  327. //My_aio_write();
  328. ret = aio_write( req );
  329. }
  330. }
  331.  
  332. }
  333.  
  334. void CSampleThread::Aio_completion_handler2( int signo, siginfo_t *info, void *context )
  335. {
  336. struct aiocb *req;
  337. int ret = 0;
  338.  
  339. /* Ensure it's our signal */
  340. if (info->si_signo == SIGIO)
  341. {
  342. req = (struct aiocb *)info->si_value.sival_ptr;
  343.  
  344. /* Did the request complete? */
  345. if (aio_error( req ) == 0)
  346. {
  347. //req->aio_buf = buf;
  348. /* Request completed successfully, get the return status */
  349. //ret = aio_return( req );
  350. //My_aio_write();
  351.  
  352. ret = aio_write( req );
  353. }
  354. }
  355.  
  356. }
  357.  
  358. //################## samplethread.h ####################
  359.  
  360. #ifndef SAMPLETHREAD_H
  361. #define SAMPLETHREAD_H
  362.  
  363. #endif // SAMPLETHREAD_H
  364.  
  365.  
  366. #include <string>
  367. #include <stdio.h>
  368.  
  369.  
  370. #define DWORD_ unsigned int
  371.  
  372. #ifdef WIN32
  373. #include <Windows.h>
  374. #include <conio.h>
  375. #endif
  376. #include <vector>
  377. #include <memory>
  378.  
  379. #include <boost/thread.hpp>
  380. #include <boost/multi_array.hpp>
  381. #include<fstream>
  382. #include<iostream>
  383.  
  384. #ifndef WIN32
  385. #include <sys/stat.h>
  386. #include <fcntl.h>
  387. #include <stdlib.h>
  388. #include <time.h>
  389. #include <stdio.h>
  390. #include <unistd.h>
  391. #include <sys/mman.h>
  392. #include <pthread.h>
  393. #include <sched.h>
  394. #include <aio.h>
  395. #include <signal.h>
  396. #include<fstream>
  397. #endif
  398.  
  399.  
  400.  
  401.  
  402. int main()
  403. {
  404.  
  405. CSampleThread Cthread;
  406. Cthread.Init();
  407.  
  408. CSampleThread Cthread2;
  409. Cthread.Init2();
  410.  
  411.  
  412. // int pid;
  413. // pid = fork();
  414.  
  415. // if(pid ==0)
  416. // {
  417. // CSampleThread Cthread;
  418. // Cthread.Init();
  419. // }
  420. // else
  421. // {
  422. // CSampleThread2 Cthread2;
  423. // Cthread2.Init2();
  424. // }
  425.  
  426.  
  427. while(true)
  428. usleep(100);
  429.  
  430. return 0;
  431. }
  432.  
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Aio_completion_handler2(int, siginfo_t*, void*) [clone .part.12]':
prog.cpp:(.text+0x9): undefined reference to `aio_error'
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Signal_aio_init()':
prog.cpp:(.text+0x3b1): undefined reference to `CSampleThread::my_aiocb'
prog.cpp:(.text+0x437): undefined reference to `CSampleThread::my_aiocb'
prog.cpp:(.text+0x43e): undefined reference to `CSampleThread::my_aiocb'
prog.cpp:(.text+0x445): undefined reference to `CSampleThread::my_aiocb'
prog.cpp:(.text+0x44c): undefined reference to `CSampleThread::my_aiocb'
/home/hDywsP/cc36Bhyp.o:prog.cpp:(.text+0x456): more undefined references to `CSampleThread::my_aiocb' follow
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Signal_aio_init()':
prog.cpp:(.text+0x467): undefined reference to `aio_write'
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Signal_aio_init2()':
prog.cpp:(.text+0x491): undefined reference to `CSampleThread::my_aiocb2'
prog.cpp:(.text+0x517): undefined reference to `CSampleThread::my_aiocb2'
prog.cpp:(.text+0x51e): undefined reference to `CSampleThread::my_aiocb2'
prog.cpp:(.text+0x525): undefined reference to `CSampleThread::my_aiocb2'
prog.cpp:(.text+0x52c): undefined reference to `CSampleThread::my_aiocb2'
/home/hDywsP/cc36Bhyp.o:prog.cpp:(.text+0x536): more undefined references to `CSampleThread::my_aiocb2' follow
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Signal_aio_init2()':
prog.cpp:(.text+0x547): undefined reference to `aio_write'
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Init2()':
prog.cpp:(.text+0x611): undefined reference to `vtable for boost::detail::thread_data_base'
prog.cpp:(.text+0x820): undefined reference to `boost::thread::start_thread_noexcept()'
prog.cpp:(.text+0x8c2): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0x959): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0xc87): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0xcf7): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0xd83): undefined reference to `boost::system::system_category()'
/home/hDywsP/cc36Bhyp.o:prog.cpp:(.text+0xe10): more undefined references to `boost::system::system_category()' follow
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Init()':
prog.cpp:(.text+0x1091): undefined reference to `vtable for boost::detail::thread_data_base'
prog.cpp:(.text+0x12a0): undefined reference to `boost::thread::start_thread_noexcept()'
prog.cpp:(.text+0x1342): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0x13d9): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0x1707): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0x1777): undefined reference to `boost::system::system_category()'
prog.cpp:(.text+0x1803): undefined reference to `boost::system::system_category()'
/home/hDywsP/cc36Bhyp.o:prog.cpp:(.text+0x1890): more undefined references to `boost::system::system_category()' follow
/home/hDywsP/cc36Bhyp.o: In function `CSampleThread::Aio_completion_handler2(int, siginfo_t*, void*) [clone .part.12]':
prog.cpp:(.text+0x1d): undefined reference to `aio_write'
/home/hDywsP/cc36Bhyp.o: In function `boost::detail::thread_data<boost::reference_wrapper<CSampleThread::Runner2> >::~thread_data()':
prog.cpp:(.text._ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEED2Ev[_ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEED5Ev]+0xb): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/home/hDywsP/cc36Bhyp.o: In function `boost::detail::thread_data<boost::reference_wrapper<CSampleThread::Runner2> >::~thread_data()':
prog.cpp:(.text._ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEED0Ev[_ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEED5Ev]+0xf): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/home/hDywsP/cc36Bhyp.o: In function `boost::detail::thread_data<boost::reference_wrapper<CSampleThread::Runner> >::~thread_data()':
prog.cpp:(.text._ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEED2Ev[_ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEED5Ev]+0xb): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/home/hDywsP/cc36Bhyp.o: In function `boost::detail::thread_data<boost::reference_wrapper<CSampleThread::Runner> >::~thread_data()':
prog.cpp:(.text._ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEED0Ev[_ZN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEED5Ev]+0xf): undefined reference to `boost::detail::thread_data_base::~thread_data_base()'
/home/hDywsP/cc36Bhyp.o: In function `std::_Sp_counted_ptr<boost::thread*, (__gnu_cxx::_Lock_policy)2>::_M_dispose()':
prog.cpp:(.text._ZNSt15_Sp_counted_ptrIPN5boost6threadELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv[_ZNSt15_Sp_counted_ptrIPN5boost6threadELN9__gnu_cxx12_Lock_policyE2EE10_M_disposeEv]+0x11): undefined reference to `boost::thread::detach()'
/home/hDywsP/cc36Bhyp.o: In function `boost::thread_resource_error::thread_resource_error()':
prog.cpp:(.text._ZN5boost21thread_resource_errorC2Ev[_ZN5boost21thread_resource_errorC5Ev]+0xa): undefined reference to `boost::system::system_category()'
/home/hDywsP/cc36Bhyp.o: In function `boost::thread::~thread()':
prog.cpp:(.text._ZN5boost6threadD2Ev[_ZN5boost6threadD5Ev]+0xa): undefined reference to `boost::thread::detach()'
/home/hDywsP/cc36Bhyp.o: In function `_GLOBAL__sub_I__ZN13CSampleThreadD2Ev':
prog.cpp:(.text.startup+0x255): undefined reference to `boost::system::generic_category()'
prog.cpp:(.text.startup+0x25a): undefined reference to `boost::system::generic_category()'
prog.cpp:(.text.startup+0x25f): undefined reference to `boost::system::system_category()'
/home/hDywsP/cc36Bhyp.o:(.data.rel.ro._ZTIN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEEE[_ZTIN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread6RunnerEEEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
/home/hDywsP/cc36Bhyp.o:(.data.rel.ro._ZTIN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEEE[_ZTIN5boost6detail11thread_dataINS_17reference_wrapperIN13CSampleThread7Runner2EEEEE]+0x10): undefined reference to `typeinfo for boost::detail::thread_data_base'
collect2: error: ld returned 1 exit status
stdout
Standard output is empty