2012-03-04 2 views
3

C 코드로 커널 모듈 목록을 얻고 나중에 버전을 인쇄하고 싶습니다.사용자 공간에서 Linux 커널 모듈 목록을 얻는 방법 C 코드?

스크립트에서이 간단하다

cat /proc/modules 
lsmod 

나중에 모든 드라이버를 실행 발견 : C 코드에서

modinfo driver_name 

, 내가 /proc/modules를 열고,이 데이터를 분석 할 수 있습니다, 이 드라이버 목록을 읽는 더 간단한 방법이 있습니까?

+0

귀하의 질문은 프로그래밍에 관한 것이므로 [SO] (으) 로의 이전을 위해 투표하십시오. 다시 게시하지 마십시오. – slhck

+0

리눅스 커널의'module.c'와'module.h' 파일에서 유용한 API 함수를 찾을 수 있습니다. – Breakthrough

+0

리눅스에서는'/ proc' 및/또는'/ sys'를 읽는 것이 많은 경우에 공식적인 방법입니다. – grawity

답변

3

C 코드에서 필자는/proc/modules을 열고 거기에서 데이터를 분석 할 수 있지만이 드라이버 목록을 읽는 더 간단한 방법이 있습니까?

간단한 정의에 따라 다릅니다.

int fd = open("/proc/modules" | O_RDONLY); 

while (read(fd, &buffer, BUFFER_LIMIT)) 
{ 
    // parse buffer 
} 

close(fd); 

개방으로 호출하고 모든 파일을 읽기 기능의 동일한 집합을 포함한다 : 때문에 모든 유닉스 토지 파일 인의 개념은은 하나 개의 관점에서 모든 것을 간단하게 않습니다.

대체 메커니즘은 커널이 프로세스의 주소 공간에 해당 정보를 가리키는 메모리를 할당하는 것입니다 (사용자 정의 시스템 호출로이 작업을 수행 할 수도 있습니다). 그러나 실제로는 필요 없습니다. ,이 방법은 C뿐만 아니라 스크립트와도 잘 작동합니다.

+2

/proc/modules가 라인 기반이기 때문에 fopen()/fgets()를 사용하면 훨씬 더 쉽습니다. – nos

+0

@nos가 확실히 동의했습니다. 코드 샘플을 자유롭게 변경하십시오 :) –

관련 문제