일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 2FA
- 인증
- SSH
- SSL
- css
- Android
- openssl
- 안드로이드
- 애플
- apple
- Xcode
- appres
- fido
- otpkey
- 앱스토어
- Nodejs
- SWIFT
- MYSQL
- FIDO2
- kmip
- OTP
- OSX
- 앱리소스
- MSYS2
- git
- WebAuthn
- 앨범북
- albumbook
- MFA
- SwiftUI
Archives
- Today
- Total
인디노트
linux 에서 C 로 대기하고 있다가 시그널을 발생하여 다른 함수에서 시그널을 보내면 깨어나서 함수를 실행하는 C 코드 본문
개발 플랫폼 및 언어/네트워크 기술
linux 에서 C 로 대기하고 있다가 시그널을 발생하여 다른 함수에서 시그널을 보내면 깨어나서 함수를 실행하는 C 코드
인디개발자 2023. 4. 15. 14:05Linux에서 시그널 처리를 위해서는 signal() 함수를 사용하여 시그널 핸들러 함수를 등록해야 합니다. 시그널 핸들러 함수는 시그널이 발생했을 때 실행됩니다.
대기 상태에서 시그널이 발생하면, 시그널 핸들러 함수가 호출되어 해당 시그널에 대한 처리를 수행합니다. 그러면 대기 중인 함수가 깨어나서 시그널 핸들러 함수를 실행하고, 이후에 다시 대기 상태로 들어갑니다.
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <unistd.h>
void signal_handler(int signal_num) {
printf("Received signal %d\n", signal_num);
}
int main() {
signal(SIGUSR1, signal_handler); // SIGUSR1 시그널 핸들러 등록
while(1) {
printf("Waiting for signal...\n");
sleep(5); // 5초간 대기
}
return 0;
}
위 코드에서는 signal_handler() 함수를 정의하여 SIGUSR1 시그널을 처리합니다. signal() 함수를 사용하여 SIGUSR1 시그널 핸들러 함수를 등록하고, 무한 루프에서 대기합니다. 5초마다 "Waiting for signal..."을 출력하고 대기하며, SIGUSR1 시그널이 발생하면 signal_handler() 함수가 호출되어 "Received signal %d"를 출력합니다.
다른 함수에서 SIGUSR1 시그널을 보내려면 kill() 함수를 사용하면 됩니다. 예를 들어, 다음과 같은 코드를 사용하여 SIGUSR1 시그널을 보낼 수 있습니다.
#include <signal.h>
#include <unistd.h>
int main() {
pid_t pid = getpid(); // 현재 프로세스 ID를 가져옴
kill(pid, SIGUSR1); // 현재 프로세스에 SIGUSR1 시그널 보냄
return 0;
}
위 코드에서는 getpid() 함수를 사용하여 현재 프로세스 ID를 가져온 후, kill() 함수를 사용하여 현재 프로세스에 SIGUSR1 시그널을 보냅니다. 이러면 대기 중인 함수가 깨어나서 signal_handler() 함수를 실행하게 됩니다.
반응형
'개발 플랫폼 및 언어 > 네트워크 기술' 카테고리의 다른 글
tcphdr 에서 data 위치 찾는 C 함수 (0) | 2023.04.16 |
---|---|
문자열로 된 ip4 주소를 unsigned char 형식으로 변환하는 C 코드 (0) | 2023.04.16 |
icmp 를 전송한 후 응답을 받아서 해당 응답이 어떤 전송건인지 확인하는 C 코드 (0) | 2023.04.14 |
iphdr 의 송신자주소 및 수신자 주소를 변경하는 C 함수 (0) | 2023.04.14 |
iphdr 의 check 계산 하는 C 코드 (0) | 2023.04.14 |
Comments