728x90
파일은 요아래에..
#include <stdio.h>
#include <time.h> /* Needed for struct timespec */
int nsleep(long miliseconds)
{
struct timespec req, rem;
if(miliseconds > 999)
{
req.tv_sec = (int)(miliseconds / 1000); /* Must be Non-Negative */
req.tv_nsec = (miliseconds - ((long)req.tv_sec * 1000)) * 1000000; /* Must be in range of 0 to 999999999 */
}
else
{
req.tv_sec = 0; /* Must be Non-Negative */
req.tv_nsec = miliseconds * 1000000; /* Must be in range of 0 to 999999999 */
}
return nanosleep(&req , &rem);
}
int main(int argc, char **argv, char **arge) {
struct timespec tps, tpe;
//int ret = nsleep(1000);
while(1){
if ((clock_gettime(CLOCK_REALTIME, &tps) != 0) || (clock_gettime(CLOCK_REALTIME, &tpe) != 0)) {
perror("clock_gettime");
return -1;
}
//printf("sleep result %d\n",ret);
printf("[%lu.%lu] %lu ns\n", tps.tv_sec, tps.tv_nsec, tpe.tv_nsec-tps.tv_nsec);
}
return 0;
}자 코드를 분석해보자. 사실상 clock_gettime 으로 접근가능한 실행시간 (Elapsed Time) 으로 접근하면 위의 스크린샷처럼 CPU에 의존성을 띄며 정확한 Nano Second 단위로 접근하여 Command 를 날리는 것이 불가능하다.
만약 핵융합과 핵분열 같이 정확한 타이밍을 필요로하는 문제가 있다면 어떻게 해야할까? 바로 고전시대의 라이브러리가 우리를 반겨준다. 다음 포스팅에서 살펴보자.
'LINUX' 카테고리의 다른 글
| How to get high precision nano second delay in linux III (0) | 2019.03.04 |
|---|---|
| How to get high precision nano second delay in linux II (0) | 2019.03.04 |
| How To Install Krita On Linux (0) | 2019.03.04 |
| How to install Google Chrome Browser on Kali Linux (0) | 2019.03.03 |
| How to measure time in milliseconds using ANSI C (0) | 2019.03.03 |
nano_sleep.c