2011-10-02 4 views
6

당신이 나를 도울 수 있기를 바랍니다. 장치가 제거 가능한지 여부를 확인하려고하는데 장치 이름 (/ dev/sdc) 만 있으면됩니다. 사실,이 파일의 전체 경로를 통해 이동식 미디어 또는 로컬 디스크에있는 파일을 확인해야합니다.장치 이름으로 장치 플래그를 얻으십시오.

은 내가 전류> FS-> PWD 에서 검색하는 tryed했습니다 내가 찾을 수있는 모든 여기에 플래그의 집합입니다 : * 전류> FS-> pwd.mnt-> mnt_sb-을 > s_bdev-> bd_disk-> 플래그 * 경우 이동식 장치

하지만 난 항상 (내가 이해, s_bdev 항상 동일한 장치 (는/dev/sda를) 가리키는) 설정 같은 플래그를 얻기위한 GENHD_FL_REMOVABLE 세트.

이제는 mtab을 구문 분석하여 내 파일이 포함 된 장치 이름 (/ dev/sdc)을 얻을 수 있지만 여전히 이동식인지 여부는 알 수 없습니다.

장치 이름별로 block_device 구조를 가져 오는 방법이 있습니까? (예를 들어, "파일"구조 FD = 개방 ("이름") FL = fged (FD) 호출하여 수득 될 수있다 FL 점 "파일"구조)

답변

1

class_dev_iter_initclass_dev_iter_next을 사용하여 블록 장치를 반복 할 수 있습니다. 사용법은 block/genhd.cblk_lookup_devt의 코드를 참조하십시오.

기기가 있으면 dev_to_disk을 사용하여 이동식 플래그를 확인할 수있는 struct gendisk *을 얻을 수 있습니다.

+0

감사합니다, 내 문제를 해결할 것 같습니다 – Makc

+0

이 방법을 사용하면이 파일의 전체 경로 만있는 경우 차단 된 장치 중 하나에 열린 파일이 포함되어 있는지 확인할 수 있습니다. – Makc

+1

@Makc :'vfs_stat'을 사용할 수 있다고 생각합니다.'dev_t '를 블록 장치와 비교할 수있는'struct kstat'를 줄 것입니다. – Hasturkun

1

읽기/SYS/블록/dev-name/removable는 장치가 제거 가능한 경우 1을, 그렇지 않은 경우 0을 포함해야합니다. (dev-name = 장치 이름 : sda, hda, fd0, ...)

+0

나는 이것에 대해 알고 있지만, 오래된 리눅스 버전에서는 작동하지 않는다. 어쨌든, 고마워. – Makc

+0

또한 커널 모듈에서 파일을 읽는 안전한 방법을 모르겠습니다. (필자는 sys_read()와 vfs_read()를 시도했습니다 - "Oops"의 원인) :) 아마도 커널 모듈에서 sysfs에 액세스하는 방법을 알고 있습니까? – Makc

관련 문제