소개
이 프로젝트에서는 C 언어에서 콜백 함수를 구현하는 방법을 배우게 됩니다. 콜백 함수는 C 프로그래밍에서 강력한 기술이며, 특히 Linux 시스템 개발과 같이 콜백 함수가 일반적으로 사용되는 상황에서 유용합니다.
👀 미리보기
$ gcc test_callback.c callback.c -o test_callback
$ ./test_callback
Alarm1:0
Alarm2:1
Alarm3:2
🎯 과제
이 프로젝트에서는 다음을 배우게 됩니다:
- C 에서 콜백 함수를 정의하고 사용하는 방법
- 콜백 함수를 사용하여 알람을 등록하고 트리거하는 방법
- 콜백 함수 구현에서 예외 상황 및 오류를 처리하는 방법
🏆 성과
이 프로젝트를 완료하면 다음을 수행할 수 있습니다:
- C 프로그래밍에서 콜백 함수의 개념과 사용법을 이해할 수 있습니다.
- 알람 등록 및 트리거를 포함하는 콜백 기반 알람 시스템을 구현할 수 있습니다.
- 콜백 함수에서 발생할 수 있는 잠재적인 문제를 처리하기 위해 견고하고 방어적인 코드를 작성할 수 있습니다.
- 이벤트 기반 시스템 또는 비동기 작업과 같은 C 프로그래밍의 다른 영역에 콜백 함수에 대한 지식을 적용할 수 있습니다.
콜백 함수 이해
이 단계에서는 C 언어에서 콜백 함수의 개념과 Linux C 프로그램 개발에서 콜백 함수가 어떻게 사용되는지 배우게 됩니다.
콜백 함수는 함수를 다른 함수의 인수로 전달하는 방법이며, 다른 함수는 나중에 전달된 함수를 호출할 수 있습니다. 이는 더 유연하고 모듈화된 코드를 가능하게 하는 강력한 기술입니다.
callback.c 파일에 제공된 코드에서 콜백 함수는 알람 시스템을 구현하는 데 사용됩니다. alarm 구조체는 알람을 나타내고, register_alarm 함수는 알람을 등록하는 데 사용됩니다. 그런 다음 hit_alarm 함수는 등록된 알람을 트리거하는 데 사용됩니다.
결함 식별 및 수정
이제 callback.c 파일에 제공된 코드를 살펴보고 결함을 수정해 보겠습니다.
- 세그멘테이션 오류 (Segmentation Fault): 이는
alarm_list가 올바르게 채워지거나 액세스되지 않아 불법적인 메모리 접근이 발생하기 때문일 가능성이 큽니다. register_alarm에서 부적절한 인덱스 처리:index변수는register_alarm에 로컬이며 함수가 호출될 때마다 0 으로 다시 초기화됩니다. 이로 인해 모든 알람이 인덱스 1 에 등록되어 서로 덮어쓰게 됩니다.
다음과 같이 callback.c 파일을 업데이트하십시오:
#include "callback.h"
alarm alarm_list[MAX_ALARMS];
int current_index = 0; // Global index tracker
void register_alarm(alarm a) {
if (current_index < MAX_ALARMS) {
alarm_list[current_index] = a;
current_index++;
}
// If the number of registered alarms exceeds MAX_ALARMS, do nothing (don't report an error)
}
int hit_alarm(int index) {
if (index < 0 || index >= MAX_ALARMS || !alarm_list[index])
return 1;
(*alarm_list[index])(index);
return 0;
}
주요 변경 사항은 다음과 같습니다:
- 알람 등록을 위한 현재 인덱스를 추적하기 위해 전역 변수
current_index를 추가했습니다. register_alarm에서 알람을 등록하기 전에current_index가MAX_ALARMS보다 작은지 확인합니다. 등록된 알람 수가MAX_ALARMS를 초과하면 오류를 보고하지 않고 단순히 계속 진행합니다.hit_alarm에서 인덱스가 유효한 범위 내에 있는지, 해당 인덱스에 실제로 알람이 등록되었는지 확인하기 위해 추가 검사를 추가했습니다. 그렇지 않은 경우, 알람이 트리거되지 않았음을 나타내기 위해 1 을 반환합니다.
콜백 함수 테스트
이제 callback.c 파일의 결함을 수정했으므로, 제공된 test_callback.c 프로그램을 실행하여 콜백 함수를 테스트해 보겠습니다.
프로그램을 컴파일합니다:
gcc test_callback.c callback.c -o test_callback
프로그램을 실행합니다:
./test_callback
출력:
Alarm1:0
Alarm2:1
Alarm3:2
이제 출력은 예상 출력과 일치해야 하며, 프로그램은 세그멘테이션 오류나 다른 오류 없이 실행되어야 합니다.
축하합니다! 콜백 함수 구현을 성공적으로 디버깅하고 수정했습니다.
요약
축하합니다! 이 프로젝트를 완료했습니다. LabEx 에서 더 많은 랩을 연습하여 기술을 향상시킬 수 있습니다.



