본문 바로가기

nanosleep() :: 초와 나노초 단위로 실행 멈추기

2025.12.06 10:24:57 0

    • 글자 크기

C 언어에서 초와 나노초로 지정한 시간 동안 실행을 멈춘다.

인수와 옵션의 의미

nanosleep()은 상대 대기 요청과 중단 시 남은 시간을 받을 주소를 받는다.
clock_nanosleep()은 시계와 flags도 받고 TIMER_ABSTIME으로 절대 마감 시각을 지정할 수 있다.
clock_nanosleep()은 오류 번호 자체를 반환하는 점이 다르다.
sleep()은 초 단위이며 시그널로 중단되면 남은 초를 반환한다.
EINTR 재시도와 주기 드리프트 정책을 구분한다.

호출 흐름 예제

아래는 함수가 쓰이는 지점을 보여 주는 부분 코드다.
파일 번호와 소켓과 공유 객체 등은 설명에 맞게 먼저 준비해야 한다.
선언만 복사해 새 C 파일 전체가 완성되는 예제는 아니다.

struct timespec delay = {.tv_sec = 0, .tv_nsec = 100000000};
struct timespec remaining;
int rc = nanosleep(&delay, &remaining);

100000000나노초는 0.1초다.
스케줄링 때문에 요청 시간보다 늦게 깨어날 수 있으며 실시간 정확도를 보장하는 타이머가 아니다.

필요한 헤더와 선언
#include <time.h>

int nanosleep(const struct timespec *req, struct timespec * rem);

반환값과 실패 처리

정상 대기 완료는 0, 중단이나 오류는 -1이다.
시그널 중단은 errno의 EINTR로 구분한다.

시그널로 중단되면 rem에 남은 시간이 들어갈 수 있다.
반복 주기마다 상대 대기를 누적하면 오차가 쌓이므로 일정 주기 작업은 절대 시각 대기도 비교한다.

참고: nanosleep — Linux man-pages

전자기기 쪽으로 문외한 저희 부모님과 지인을 보고 컴퓨터 쪽에 지식이 없는 분들도 쉽게 프로그램을 이용할 수 있도록 하자는 생각으로 포스팅을 하고 있으며 유익한 정보를 최대한 많이 담아두는 것이 저의 궁극적인 목표입니다.
clock_nanosleep() :: 시계를 지정해 절대 또는 상대 시간만큼 기다리기 clock_settime() :: 선택한 시계의 시각 변경하기

답글 달기

전화번호 또는 이메일을 남겨두시면 댓글이 달렸을경우 알려드립니다.
사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )

번호 제목 날짜
241 sigaddset() :: 시그널 집합에 항목 추가하기 2026.01.02
240 sigfillset() :: 모든 시그널을 포함하는 집합 만들기 2026.01.02
239 배열 비교 :: std::array는 원소 순서대로 비교한다 2026.01.02
238 sigemptyset() :: 비어 있는 시그널 집합 만들기 2026.01.02
237 sigaltstack() :: 시그널 핸들러용 대체 스택 지정하기 2026.01.01
236 sigqueue() :: 정수나 포인터 값을 포함한 시그널 보내기 2026.01.01
235 sigtimedwait() :: 제한 시간 안에서 시그널 기다리기 2026.01.01
234 포인터 :: 주소와 그 주소의 값 구분하기 2026.01.01
233 sigwaitinfo() :: 시그널과 부가 정보를 함께 기다리기 2026.01.01
232 sigwait() :: 시그널 집합 중 하나를 동기적으로 기다리기 2025.12.31
231 sigsuspend() :: 일시적인 마스크로 시그널 기다리기 2025.12.31
230 sigpending() :: 처리 대기 중인 시그널 목록 얻기 2025.12.31
229 std::array::back() :: 마지막 원소에 접근하기 2025.12.31
228 sigprocmask() :: 호출 스레드의 시그널 마스크 변경하기 2025.12.30
227 sigaction() :: 시그널 처리 동작을 구조체로 지정하기 2025.12.30
226 raise() :: 현재 실행 흐름에 시그널 발생시키기 2025.12.30
225 killpg() :: 프로세스 그룹에 시그널 보내기 2025.12.30
224 문자열 리터럴 :: 포인터와 수정 가능한 배열 2025.12.30
223 kill() :: 프로세스 또는 그룹에 시그널 보내기 2025.12.29
222 getentropy() :: 작은 크기의 보안 난수 버퍼 채우기 2025.12.29
221 getrandom() :: 커널에서 안전한 난수 바이트 얻기 2025.12.29
220 fork() :: 현재 프로세스를 복제하기 2025.12.29
219 std::array::front() :: 첫 원소 참조 얻기 2025.12.29
218 confstr() :: 런타임 설정 문자열 얻기 2025.12.27
217 fpathconf() :: 열린 파일의 파일 시스템 제한 조회하기 2025.12.27
216 심볼릭 링크 :: 다른 경로를 가리키는 파일 2025.12.27
215 pathconf() :: 특정 경로의 파일 시스템 제한 조회하기 2025.12.26
214 문자 배열 :: 널 종료 문자까지 공간 확보하기 2025.12.26
213 sysconf() :: 런타임 시스템 설정값 조회하기 2025.12.26
212 sysinfo() :: 메모리와 시스템 부하 정보 얻기 2025.12.26
211 uname() :: 커널과 시스템 식별 정보 얻기 2025.12.26
210 sched_yield() :: 다른 실행 가능한 스레드에 CPU 양보하기 2025.12.25
209 std::array::empty() :: 길이가 0인 고정 배열 2025.12.25
208 sched_setaffinity() :: 스레드가 실행할 CPU 집합 제한하기 2025.12.25
207 sched_getaffinity() :: 실행이 허용된 CPU 집합 조회하기 2025.12.25
206 sched_getcpu() :: 현재 스레드가 실행 중인 CPU 번호 얻기 2025.12.25
205 지정 초기화 :: 배열의 원하는 위치만 채우기 2025.12.24
204 setpriority() :: 프로세스 집합의 nice 값 바꾸기 2025.12.24
203 getpriority() :: nice 우선순위 값 조회하기 2025.12.24
202 nice() :: 프로세스의 스케줄링 우선순위 조정하기 2025.12.24
201 prlimit() :: 다른 프로세스의 자원 한도 조회와 설정하기 2025.12.24
200 std::array::size() :: 저장한 원소 개수 얻기 2025.12.23
199 setrlimit() :: 프로세스 자원 한도 바꾸기 2025.12.23
198 getrlimit() :: 프로세스 자원 한도 조회하기 2025.12.23
197 getsubopt() :: 쉼표로 구분된 하위 옵션 해석하기 2025.12.23
196 getopt_long() :: 긴 이름을 가진 명령행 옵션 해석하기 2025.12.23
195 2차원 배열 :: 행과 열을 나눠 순회하기 2025.12.22
194 getopt() :: 짧은 명령행 옵션 해석하기 2025.12.22
193 clearenv() :: 환경 변수 목록 비우기 2025.12.22
192 unsetenv() :: 환경 변수 제거하기 2025.12.22
191 setenv() :: 환경 변수 값 설정하기 2025.12.22
190 std::array::data() :: 연속 저장 공간을 포인터로 넘기기 2025.12.21
189 secure_getenv() :: 보안 실행 환경을 고려해 환경 변수 읽기 2025.12.21
188 getenv() :: 환경 변수 문자열 읽기 2025.12.21
187 abort() :: 비정상 종료를 발생시키기 2025.12.21
186 atexit() :: 정상 종료 시 호출할 함수 등록하기 2025.12.21
185 배열 복사 :: 포인터 대입과 원소 복사의 차이 2025.12.20
184 exit() :: 표준 정리 절차를 거쳐 프로세스 끝내기 2025.12.20
183 pclose() :: popen 스트림을 닫고 명령 종료 상태 얻기 2025.12.20
182 popen() :: 명령의 표준 입출력을 FILE 스트림으로 연결하기 2025.12.20
181 inode :: 리눅스 파일의 진짜 식별자 2025.12.20
180 std::array::fill() :: 모든 원소를 같은 값으로 채우기 2025.12.19
179 chmod :: 리눅스 파일 권한 변경하기 2025.12.19
178 system() :: 셸을 통해 명령 문자열 실행하기 2025.12.19
177 posix_spawnp() :: PATH를 검색하는 방식으로 프로그램 생성하기 2025.12.19
176 posix_spawn() :: 프로세스 생성과 프로그램 실행을 함께 요청하기 2025.12.19
175 배열 매개변수 :: 주소와 길이를 함께 넘기기 2025.12.18
174 execveat() :: 디렉터리 기준 경로로 프로그램 실행하기 2025.12.18
173 fexecve() :: 열린 실행 파일 디스크립터로 프로그램 실행하기 2025.12.18
172 execvpe() :: PATH와 환경 배열을 사용해 프로그램 실행하기 2025.12.18
171 std::array::at() :: 인덱스 범위를 검사하며 접근하기 2025.12.18
170 execlp() :: PATH에서 실행 파일을 찾아 인수 목록으로 실행하기 2025.12.17
169 execvp() :: PATH에서 실행 파일을 찾아 인수 배열로 실행하기 2025.12.17
168 execle() :: 인수 목록과 환경 배열로 프로그램 실행하기 2025.12.17
167 execv() :: 인수 배열로 새 프로그램 실행하기 2025.12.17
166 배열 길이 :: sizeof 나눗셈이 통하는 위치 2025.12.17
165 execl() :: 인수 목록으로 새 프로그램 실행하기 2025.12.16
164 setsid() :: 새 세션과 프로세스 그룹 만들기 2025.12.16
163 getsid() :: 세션 ID 조회하기 2025.12.16
162 getpgrp() :: 현재 프로세스 그룹 ID 얻기 2025.12.16
161 std::array :: 길이가 자료형에 들어가는 배열 2025.12.16
160 setpgid() :: 프로세스를 지정한 그룹으로 옮기기 2025.12.15
159 getpgid() :: 프로세스 그룹 ID 얻기 2025.12.15
158 gettid() :: 현재 커널 스레드 ID 얻기 2025.12.15
157 getppid() :: 부모 프로세스 ID 얻기 2025.12.15
156 배열 인덱스 :: 마지막 원소와 한 칸 뒤 구분하기 2025.12.15
155 getpid() :: 현재 프로세스 ID 얻기 2025.12.14
154 wait4() :: 지정한 자식의 상태와 자원 사용량 얻기 2025.12.14
153 wait3() :: 자식 상태와 자원 사용량 함께 얻기 2025.12.14
152 waitid() :: 대상과 상태 종류를 지정해 자식 기다리기 2025.12.14
151 범위 for 참조 변수 :: 원소를 제자리에서 바꾸기 2025.12.14
150 waitpid() :: 지정한 자식 프로세스 상태 기다리기 2025.12.13
149 wait() :: 종료한 자식 프로세스 하나 회수하기 2025.12.13
148 tzset() :: 환경 변수에서 시간대 규칙 다시 읽기 2025.12.13
147 getrusage() :: 프로세스의 CPU와 메모리 자원 사용량 조회하기 2025.12.13
146 배열 초기화 :: 생략한 원소는 무엇이 될까 2025.12.13
145 times() :: 프로세스와 자식의 CPU 사용 시간 조회하기 2025.12.12
144 clock() :: 프로세스가 사용한 CPU 시간 얻기 2025.12.12
143 difftime() :: 두 타임스탬프 사이의 초 차이 구하기 2025.12.12
142 Here document :: 여러 줄 입력을 명령에 전달하기 2025.12.12
141 범위 for 값 변수 :: 원소를 복사해서 읽기 2025.12.11
140 strptime() :: 형식 문자열로 날짜와 시각 해석하기 2025.12.11
139 strftime() :: 시각 구조체를 형식화한 문자열로 만들기 2025.12.11
138 xargs :: 표준 입력을 명령 인수로 바꾸기 2025.12.11
137 enum :: 상태 값에 이름 붙이기 2025.12.10
136 timegm() :: UTC 시각 구조체를 타임스탬프로 변환하기 2025.12.10
135 mktime() :: 지역 시각 구조체를 타임스탬프로 변환하기 2025.12.10
134 gmtime_r() :: 타임스탬프를 UTC 시각 구조체로 변환하기 2025.12.10
133 localtime_r() :: 타임스탬프를 지역 시각 구조체로 변환하기 2025.12.10
132 auto& :: 추론하면서 원본을 수정하기 2025.12.09
131 timer_getoverrun() :: POSIX 타이머 통지 누락 횟수 얻기 2025.12.09
130 timer_gettime() :: POSIX 타이머 남은 시간 조회하기 2025.12.09
129 timer_settime() :: POSIX 타이머 만료 시각과 반복 주기 설정하기 2025.12.09
128 timer_delete() :: POSIX 타이머 삭제하기 2025.12.09
127 typedef :: 자료형에 의미 있는 이름 붙이기 2025.12.08
126 timer_create() :: POSIX 타이머 만들기 2025.12.08
125 getitimer() :: 프로세스 interval timer 상태 조회하기 2025.12.08
124 setitimer() :: 프로세스 interval timer 설정하기 2025.12.08
123 alarm() :: 일정 시간 뒤 SIGALRM 예약하기 2025.12.08
122 참조와 포인터 :: 선택적인 대상은 어떻게 표현할까 2025.12.06
121 sleep() :: 초 단위로 실행 멈추기 2025.12.06
120 clock_nanosleep() :: 시계를 지정해 절대 또는 상대 시간만큼 기다리기 2025.12.06
nanosleep() :: 초와 나노초 단위로 실행 멈추기 2025.12.06
118 clock_settime() :: 선택한 시계의 시각 변경하기 2025.12.06
117 const :: 바꾸지 않을 객체 표시하기 2025.12.05
116 clock_getres() :: 선택한 시계의 시간 해상도 얻기 2025.12.05
115 clock_gettime() :: 선택한 시계의 현재 시각 얻기 2025.12.05
114 gettimeofday() :: 현재 시각을 초와 마이크로초로 얻기 2025.12.05
113 time() :: 에포크 이후 현재 초 수 얻기 2025.12.05
112 const 참조 :: 복사 없이 읽기만 하기 2025.12.04
111 mkdtemp() :: 충돌을 피하며 임시 디렉터리 만들기 2025.12.04
110 mkstemp() :: 충돌을 피하며 임시 파일 안전하게 만들기 2025.12.04
109 tmpfile() :: 자동 정리되는 임시 파일 스트림 만들기 2025.12.04
108 open_memstream() :: 동적으로 커지는 메모리 출력 스트림 만들기 2025.12.04
107 부호 혼합 비교 :: 음수와 배열 길이 비교하기 2025.12.03
106 fmemopen() :: 메모리 버퍼를 FILE 스트림으로 열기 2025.12.03
105 read :: 셸에서 한 줄씩 안전하게 읽기 2025.12.03
104 funlockfile() :: FILE 스트림 내부 잠금 해제하기 2025.12.03
103 lvalue 참조 :: 원본에 다른 이름 붙이기 2025.12.02
102 "$@"와 "$*" :: 셸 함수 인수 전달 차이 2025.12.02
101 ftrylockfile() :: FILE 스트림 잠금을 기다리지 않고 시도하기 2025.12.02
100 flockfile() :: FILE 스트림의 내부 잠금 획득하기 2025.12.02
99 setbuf() :: FILE 스트림 버퍼 제공하기 2025.12.01
98 정수 나눗셈 :: 소수 부분이 사라지는 위치 2025.12.01
97 setvbuf() :: FILE 스트림 버퍼링 방식 설정하기 2025.12.01
96 perror() :: 현재 errno 설명을 표준 오류에 출력하기 2025.12.01
95 clearerr() :: 스트림의 EOF와 오류 표시 지우기 2025.12.01
94 ferror() :: 스트림의 오류 표시 확인하기 2025.11.29
93 값 초기화 :: {}로 기본 값을 만들기 2025.11.29
92 feof() :: 스트림의 EOF 표시 확인하기 2025.11.29
91 fsetpos() :: 저장한 스트림 위치로 복원하기 2025.11.29
90 fgetpos() :: 스트림 위치와 상태를 저장하기 2025.11.26
89 rewind() :: 스트림 위치를 처음으로 되돌리기 2025.11.26
88 정수 리터럴 :: 진법과 접미사 구분하기 2025.11.26
87 ftello() :: off_t 기반으로 FILE 현재 위치 얻기 2025.11.26
86 ftell() :: FILE 스트림의 현재 위치 얻기 2025.11.26
85 fseeko() :: off_t 기반으로 FILE 위치 이동하기 2025.11.25
84 fseek() :: FILE 스트림의 파일 위치 바꾸기 2025.11.25
83 중괄호 초기화 :: 축소 변환을 진단받기 2025.11.25
82 fflush() :: 스트림의 출력 버퍼 기록하기 2025.11.25
81 ungetc() :: 문자 하나를 스트림 입력으로 되돌리기 2025.11.24
80 fwrite() :: 원소 배열을 FILE 스트림에 쓰기 2025.11.24
79 puts() :: 문자열과 개행을 표준 출력에 쓰기 2025.11.24
78 int32_t :: 정확한 비트 폭이 필요할 때 2025.11.24
77 fputs() :: 널 종료 문자열을 스트림에 쓰기 2025.11.23
76 putchar() :: 표준 출력에 문자 하나 쓰기 2025.11.23
75 putc() :: 스트림에 문자 하나 출력하기 2025.11.23
74 fputc() :: FILE 스트림에 문자 하나 쓰기 2025.11.23
73 static_assert :: 잘못된 가정을 빌드에서 잡기 2025.11.23
72 fread() :: FILE 스트림에서 원소 배열 읽기 2025.11.22
71 getdelim() :: 지정한 구분자까지 버퍼를 늘려 읽기 2025.11.22
70 getline() :: 필요하면 버퍼를 늘려 한 줄 읽기 2025.11.22
69 size_t :: 크기와 인덱스를 담는 자료형 2025.11.22
68 exec :: 현재 셸을 다른 프로그램으로 교체하기 2025.11.22
67 fgets() :: 크기를 제한해 한 줄 읽기 2025.11.21
66 trap :: 셸 스크립트 종료 시 정리 작업하기 2025.11.21
65 getchar() :: 표준 입력에서 문자 하나 읽기 2025.11.21
64 constexpr :: 컴파일 때 계산할 수 있는 값 2025.11.21
63 getc() :: 스트림에서 다음 문자 읽기 2025.11.21
62 fgetc() :: FILE 스트림에서 문자 하나 읽기 2025.11.20
61 vsscanf() :: 가변 인수 목록으로 문자열 해석하기 2025.11.20
60 vfscanf() :: 가변 인수 목록으로 FILE 입력 해석하기 2025.11.20
59 sizeof :: 자료형과 객체의 바이트 수 2025.11.20
58 vscanf() :: 가변 인수 목록으로 표준 입력 해석하기 2025.11.20
57 sscanf() :: 문자열에서 형식에 맞춰 값 추출하기 2025.11.19
56 fscanf() :: FILE 스트림에서 형식에 맞춰 값 읽기 2025.11.19
55 scanf() :: 표준 입력에서 형식에 맞춰 값 읽기 2025.11.19
54 enum class :: 범위가 있는 열거형 만들기 2025.11.19
53 vasprintf() :: 가변 인수 목록으로 새 문자열 할당하기 2025.11.19
52 vdprintf() :: 가변 인수 목록을 디스크립터로 출력하기 2025.11.17
51 vsnprintf() :: 가변 인수 목록으로 길이 제한 문자열 만들기 2025.11.17
50 vfprintf() :: 가변 인수 목록으로 스트림에 출력하기 2025.11.17
49 float와 double :: 소수의 정밀도 확인하기 2025.11.17
48 vprintf() :: 가변 인수 목록으로 표준 출력하기 2025.11.17
47 asprintf() :: 필요한 버퍼를 할당해 형식화한 문자열 만들기 2025.11.16
46 dprintf() :: 파일 디스크립터에 형식화해서 출력하기 2025.11.16
45 snprintf() :: 버퍼 크기를 제한해 형식화한 문자열 만들기 2025.11.16
44 using :: 긴 자료형에 별칭 붙이기 2025.11.16
43 fprintf() :: 형식화한 내용을 지정한 FILE 스트림에 쓰기 2025.11.14
42 printf() :: 형식 문자열을 사용해 표준 출력에 쓰기 2025.11.14
41 lldiv() :: long long 정수의 몫과 나머지 함께 구하기 2025.11.14
40 ldiv() :: long 정수의 몫과 나머지 함께 구하기 2025.11.14
39 _Bool :: 참과 거짓을 저장하기 2025.11.10
38 div() :: int 정수의 몫과 나머지 함께 구하기 2025.11.10
37 llabs() :: long long 정수의 절댓값 구하기 2025.11.10
36 labs() :: long 정수의 절댓값 구하기 2025.11.10
35 decltype :: 식의 자료형을 그대로 확인하기 2025.11.10
34 abs() :: int 정수의 절댓값 구하기 2025.11.09
33 $? :: 셸에서 바로 전 명령의 종료 상태 확인하기 2025.11.09
32 strtold() :: 문자열을 long double 실수로 변환하기 2025.11.09
31 set -euo pipefail :: 셸 스크립트 실패를 빨리 발견하기 2025.11.09
30 char :: 문자와 작은 정수를 구분하기 2025.11.09
29 strtod() :: 문자열을 double 실수로 변환하기 2025.11.08
28 strtof() :: 문자열을 float 실수로 변환하기 2025.11.08
27 strtoumax() :: 문자열을 최대 폭 비부호 정수로 변환하기 2025.11.08
26 strtoimax() :: 문자열을 최대 폭 부호 정수로 변환하기 2025.11.08
25 auto :: 초기값에서 자료형 추론하기 2025.11.07
24 strtoull() :: 문자열을 unsigned long long 정수로 변환하기 2025.11.07
23 strtoul() :: 문자열을 unsigned long 정수로 변환하기 2025.11.07
22 strtoll() :: 문자열을 long long 정수로 변환하기 2025.11.07
21 strtol() :: 문자열을 long 정수로 변환하기 2025.11.07
20 short와 long :: 이름보다 범위를 확인하기 2025.11.06
19 toupper() :: 문자를 대문자로 바꾸기 2025.11.06
18 tolower() :: 문자를 소문자로 바꾸기 2025.11.06
17 isxdigit() :: 16진수 숫자 문자인지 판별하기 2025.11.06
16 isupper() :: 대문자인지 판별하기 2025.11.06
15 nullptr :: 정수 0과 다른 널 포인터 표현 2025.11.05
14 isspace() :: 공백과 개행 같은 공백 문자인지 판별하기 2025.11.05
13 ispunct() :: 구두점 문자인지 판별하기 2025.11.05
12 isprint() :: 공백을 포함한 출력 가능 문자인지 판별하기 2025.11.05
11 islower() :: 소문자인지 판별하기 2025.11.05
10 unsigned int :: 음수가 없는 정수의 순환 2025.11.03
9 isgraph() :: 공백을 제외한 출력 가능 문자인지 판별하기 2025.11.03
8 isdigit() :: 십진수 숫자 문자인지 판별하기 2025.11.03
7 RAII :: 자원 수명을 객체 수명에 묶기 2025.11.03
6 iscntrl() :: 제어 문자인지 판별하기 2025.11.02
5 bool :: 조건 결과를 값으로 보관하기 2025.11.02
4 std::string_view :: 문자열을 복사하지 않고 바라보기 2025.11.01
3 isblank() :: 수평 공백 문자인지 판별하기 2025.11.01
2 isalpha() :: 알파벳 문자인지 판별하기 2025.11.01
1 int :: 정수의 범위부터 확인하기 2025.11.01

게시글 URL이 복사되었습니다.

비회원이 작성한 게시글은 댓글 작성마다 닉네임이 변경되므로 동일인임을 알 수 있도록 IP 주소 배열 2번째까지 공개합니다.

SKT, KT, LG U+ : 각 통신사 사용자가 남긴 댓글입니다.

Personal : 와이파이나 랜선에 직접 연결된 사용자가 남긴 댓글입니다.

회원만 다운로드가 가능합니다.
확인을 누르면 회원가입 페이지로 이동합니다.

회원이라면 로그인 후 다시 시도해 보세요.
확인을 누르면 회원가입 페이지로 이동합니다.

글을 모두 읽을때까지 소요되는 추정 시간 입니다.

업로드/다운로드 속도는 서버의 네트워크 트래픽 정보 입니다.
개별 사용자의 속도와는 관련이 없습니다.

콕 찔렀습니다!

PC가 이미 켜져 있습니다.

알 수 없는 오류가 발생했습니다.

PC에 전원 ON 명령을 요청했습니다.

PC 전원이 켜졌습니다.