2012-04-29 1 views
0

나는 탑재 된 모든 CDROM을 액세스하고 어떤 동작을 수행하는 리눅스에서 C 언어로 함수를 작성해야한다.
나는리눅스는 C 코드에서 모든 마운트 된 CDROM을 찾는다.

count = getmntinfo(&buf, 0); 

를 사용하는 모든 장치에 루핑 및 Linux에서 동일한 작업을 수행 할 수있는 방법이

buf[i].f_type == 17 

을인가 확인 BSD에 그것을 할 수 있습니까?

+2

CD-ROM의 정의는 무엇입니까? DVD-ROM 또는 BD-ROM이 포함됩니까? 위의 ISO 이미지가 마운트 된 것은 어떻습니까? – NPE

+0

모든 기기. –

답변

2

아마도 가장 좋은 방법은/proc/mounts를 구문 분석하는 것입니다./etc/mtab과 동일하게 보이지만 실제로는 디스크상의 파일이 아니며 커널 인터페이스이기 때문에 fread(), fscanf()가 아닌 read()와 같은 저수준 파일 기술자 함수를 사용해야합니다.) 등을 포함한다. CDROM을 마운트하는 모든 리눅스 시스템은 또한 proc를 사용할 수 있으며, 마운트 (inuding)의 많은 부분은 권한을 읽을 필요가 없다.

도 libudev,하지만 난 솔루션은 훨씬 더 복잡 할 것이다 생각 :

http://www.freedesktop.org/software/systemd/libudev/

다시 말하지만, 사실상 CD를 ​​마운트 모든 리눅스 시스템은 또한 udev를 사용합니다, 제가 생각하지만, 이것은 proc을위한 것이라고 조금 덜 사실입니다.

/sys/dev에는 사용자가 결정할 수있는 마운트 된 각 장치에 대한 심층적 인 정보가 들어 있습니다. libudev는 이러한 경로를 사용합니다.

정말로, 사용자를 존중하기 위해/dev/dvdrw 등과 같은 기존의 심볼릭 링크를 사용하고 시도해야하며 비 전통적인 장소에서 많은 것을 시도하지 않아야한다고 생각합니다. 그것이 그 링크가있는 것입니다. 또한 일을 훨씬 쉽게합니다.

+0

그리고 장치가 CDROM인지 어떻게 확인할 수 있습니까? –

+1

파일 시스템이'udf' 또는'iso9660'인지 확인하십시오. 그것이 내 마음에 오는 유일한 것입니다. – Artefact2

+0

또한,/dev 이름은 http://ftp.osuosl.org/pub/linux/docs/device-list/devices-2.6+.txt 시스템을 따르지만, 이것 역시 명확하지 않습니다. udev는 "devtype"문자열을 가지고있는 것처럼 보입니다./proc/mounts (즉, parse/proc/mounts 및 모든 적당한 cantidate 시도)와 함께 조사해야 할 수도 있습니다. libudev는/sys/dev 경로를 사용합니다. 위의 편집을 참조하십시오. – delicateLatticeworkFever

관련 문제