2014-05-19 3 views
1

Qt 5.2 응용 프로그램에서 안전하게 USB 키를 제거 할 수있는 방법을 찾고 있지만이를 수행 할 Qt 모듈을 찾을 수 없습니다.Qt 안전하게 장치를 제거하십시오

내가 할 수있는 방법입니까 아니면 하드 코딩해야합니까?

+0

당신은 USB 키를 제거하여 무엇을 의미합니까? – lpapp

+0

@ LaszloPapp 나는 [이] (http://windows.microsoft.com/ko-kr/windows7/safely-remove-devices-from-your-computer)와 같은 것을 의미합니다. –

답변

1

제거하여 USB 장치를 마운트 해제한다는 것은 해당 장치에 대한 교차 플랫폼 솔루션이 없음을 의미합니다. 아마도 QtSystems 모듈에 무언가를 추가 할 수 있지만 문제는 관리자 권한이나 몇 가지 트릭이 필요하다는 것입니다. setuid 또는 caps on Linux 등등.

당신은 당신의 측면에 지금은이 기능을 달성하기 위해 다음 행과 함께 뭔가를 할 수 :

void MyClass::unmount() { 
#ifdef Q_OS_LINUX 
    // See details: http://linux.die.net/man/2/umount 
    if (umount(myUsbKeyPath) < 0) 
     qDebug() << "Failed to umount"; 
#elif Q_OS_WIN 
    // See details: http://support.microsoft.com/default.aspx?scid=kb;en-us;165721 
    DWORD dwBytesReturned; 
    DeviceIoControl(hVolume, 
        IOCTL_STORAGE_EJECT_MEDIA, 
        NULL, 0, 
        NULL, 0, 
        &dwBytesReturned, 
        NULL); 
#endif 
} 
+0

그 소리가 훌륭합니다. Mac OS 용 코드가 있습니까? –

+0

@ ꜱᴀᴍᴏᴛʜ : 아니요, 죄송합니다. 또한 pmount가 setuid를 사용하여 일반 사용자로 umounting을 허용하는 것과 같은 작업을 수행 할 수도 있습니다. 또한 디스크 정보 등을 반환하는 QtSystems와 함께 사용해야합니다. 경로가 반드시 교차 플랫폼은 아닙니다. 시리얼 포트 경로와 비슷합니다. – lpapp

+0

@ ꜱᴀᴍᴏᴛʜ : 사실, 리눅스 부분도 Mac에서 작동 할 수 있습니다. 어느 쪽이든, 나는 그것을 할 수있는 방법이 있는지 또는 코드를 작성해야하는지에 대한 대답을 얻은 것 같습니다. :) – lpapp

1

Qt를 사용하여 USB를 제거한 적이 없지만이 간단한 c 코드도 작동합니다.

#include <sys/mount.h> 

int umount(const char *target);