
Linux 커널 코드를 연구하고 검사하면서 나는 다음과 같은 기능을 발견했습니다.make_request_fn. 존재하다이것링크에 따르면 이 함수 유형 정의는 다음 위치에 있습니다.include/linux/blkdev.h, 211번째 줄:
typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);
그러나 .c 파일에서 소스 코드로 구현이 어디에 있는지에 대한 언급은 없습니다. 내 질문은 이 함수의 소스 코드가 어디에 있습니까?
답변1
typedef void (make_request_fn) (struct request_queue *q, struct bio *bio);
이것은 아니다함수 선언. 그 정의는기능 유형. 나중에 같은 파일에서include/linux/blkdev.h, 299행, request_queue
동일한 이름을 가진 구조의 필드를 가져옵니다.
그리고drivers/md/bcache/request.c 파일의 1140행, 이 필드에는 함수가 할당되어 있으므로 flash_dev_make_request
함수를 호출했다고 생각 make_request_fn()
하지만 실제로는 호출했습니다 flash_dev_make_request()
.
이는 캡슐화와 다형성을 제공하는 정말 기본적인 방법이며 C의 정말 기본적인 OOP 모델입니다.
답변2
커널 버전마다 기능적 레이아웃이 다른 것 같습니다. 저는 Linux 커널 4.9에서 작업 중입니다. make_request_fn은 blk-core.c의 blk_queue_make_request() 함수에 의해 초기화됩니다.