문제

나에 관심있는 반복된 모든 파일 시스템에 OSX(현재 실행 중인 10.9Mavericks).내가 찾는 것은 비슷한 getmntent()또는 출력의 산 쉘이 명령(하고 싶지만,그것에서 객관적으므로,구문 분석의 출력을 쉘 명령을 분명하지 않는 최적의).

내가 찾고있는 비트에서 디스크의 중재 프레임워크를 표시할 수 있는 것에 대한 알림 마운트 및 분를 사용하여 이벤트를 이 framework.내가 누락 될 수 있습니다 무언가가있다,그러나 그렇지 않은 나에게 분명하는 방법이 있을 반복하는 기존의 마운트된 파일 시스템을 사용하여 디스크에 있는 중재.

내가 사용하여 탐색 getfsent()하는 것 같았다는 것 솔루션을 제공하지만,테스트 후에는 내가 발견한 것의 이용을 제한하고 있으니 참고 하나 이상의 입장에서 반복 getfsent().다음 코드를 참조하십시오:

struct fstab* fsentry;
setfsent();
fsentry = getfsent();
while(fsentry)
{
    //do something with fsentry
    fsentry = getfsent();
}
endfsent();

항목만 나는 여기에 점점에 대해/파일 시스템입니다.두 번째 시간을 전화 getfsent()NULL 을 반환하면 더 많은 항목이 있습니다.Mount 명령을 보여주는 여러 다른 사람을 포함하여 거치/쓰기가 정상적으로 동작하는 파일 시스템:

/dev/disk0s2 on / (hfs, local, journaled)
devfs on /dev (devfs, local, nobrowse)
map -hosts on /net (autofs, nosuid, automounted, nobrowse)
map auto_home on /home (autofs, automounted, nobrowse)
//user@<ip address>/public on /Volumes/public (smbfs, nodev, nosuid, mounted by user)

그래서 그것처럼 보인다 getfsent()시작을 내가 무엇을 기대하지만,어떤 이유로 중지?

나의 질문에 요약이다:는 가장 좋은 방법은 무엇입 반복하는 파일 시스템에 OSX?

우 응답이 왜 나는 단지 하나의 결과에서 getfsent()관심이있을 것입니다.

도움이 되었습니까?

해결책

거기에 몇 가지 다른 방법으로 열거된 볼륨,OS X 에서 각각 다른 설정의 일으킬 수 있습니다.가장 높은(고 쉬운)수준에 사용할 수 있습니다 NSFileManager 의 mountedVolumeURLsIncludingResourceValuesForKeys:options:.여기에 약자를 들어:

NSArray *urls = [[NSFileManager defaultManager] mountedVolumeURLsIncludingResourceValuesForKeys:@[NSURLVolumeNameKey] options:0];
for (NSURL *url in urls) {
  NSLog(@"Volume mounted at: %@", [url path]);
}

다음 옵션은 다시 우리를 C 영토-그리고 당신은 너무 가까이 있었다 원본 접근 방식이다.OS X(BSD),없 getmntent();대신에,거기에 getmntinfo(), 는 매우 비슷하다.목록된 볼륨을 통해 getmntinfo(),다음을 수행할 수 있습니다:

struct statfs* mounts;
int num_mounts = getmntinfo(&mounts, MNT_WAIT);
if (num_mounts < 0) {
  // do something with the error
}

for (int i = 0; i < num_mounts; i++) {
  NSLog(@"Disk type '%s' mounted at: %s", mounts[i].f_fstypename, mounts[i].f_mntonname);
}

내가 사용했던 이들 모두 Api side-by-side 릴리스 이후의 10.6. getmntinfo() 은 항상보다 더 완벽한 [NSFileManager mountedVolumeURLsIncludingResourceValuesForKeys:options:]:후자를 필터링합니다 /dev 과 다른 파일시스템는 당신은 수도 있고 싶지 않을 수도 있습니다.그것은 일반적으로 신뢰할 수 있는,그러나,디스크에 대한 연결의 시스템입니다.

목적 뒤에 DiskArbitration 프레임워크가 다른으로,당신은 나타났습니다.DiskArbitration 에 대해 모니터링하고 관리하는 디스크 자산입니다.와 함께,당신이 얻을 수있는 호출될 때마다 새로운 디스크가 장착되거나 수 있습니다.을 관리할 수도 있습니다 그들 디스크 이름을 변경하여,설치,해제,또는 그들을 분출뿐만 아니라,삽입하에서 자신의 마운트/마운트 프로세스 및 잠재적으로 중단을 요청합니다.하지만,당신이 지적으로,그것은 인터페이스를 제공하지 않 목록에 대한 기존의 디스크가 있습니다.일단 당신이 당신의 목록된 볼륨을 다한 다음 정지(따라 물론,이는 목록!).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top