2012-09-18 3 views
2

내 질문은 다음과 같습니다. 저는 임베디드 리눅스 시스템에서 실행되는 소프트웨어가 있습니다.이 소프트웨어에는 pendrive로 데이터를 내보내는 기능이 있습니다. 이제는 내 함정에 빠지며 일부 사용자는 키에 오래된 pendrive를 사용하려고했습니다. 읽기/쓰기 모드와 읽기 전용 모드 사이를 전환 할 수 있습니다. 이제 장치가 읽기 전용 모드인지 확인하는 방법을 알아야합니다.이 방법은 내 응용 프로그램에서 사용자에게 몇 가지 피드백을 보여줍니다. 장치를 마운트하기 전에 읽기 전용 상태를 확인하는 시스템 호출이 있습니까?pendrive가 읽기 전용 모드임을 발견하는 방법은 무엇입니까?

+2

글을 쓰려고 ... ..? 일반적으로이 "장치는 읽기 전용"또는 "파일을 쓸 수 없습니다"라는 메시지는 내보내기/쓰기 시도가 발생할 때 표시됩니다 (예 : 발견 됨) *. 또한 쓰기가 실패 할 수있는 다른 이유가 있습니다. 어떤 경우에도 파일 시스템이 마운트 된 후 읽기 전용 상태 *를 확인하는 더 좋은 기회가 있다고 생각합니다. –

+2

"장치를 장착하기 전에"란 무엇을 의미합니까? 귀하의 응용 프로그램은 장치 장착에 책임이 있습니까? 왜 이렇게이다? –

답변

4

이 문제를 처리하는 일반적인 방법은 파일을 쓰기 위해 열려고 시도한 다음 errno == EACCES을 확인하는 것입니다. 사전에 확인해야하는 경우

그러나, 그

int on_readonly_fs(char const *path) 
{ 
    struct statvfs fsinfo; 

    while (statvfs(path, &fsinfo)) == -1) 
     if (errno != EINTR) 
      return -1; 
    return fsinfo.f_flag & ST_RDONLY; 
} 

이다 그러나 이것은 단지 장치를 장착 후 작동합니다.

+1

또한 "ro"플래그에 대해/proc/mounts를 구문 분석 할 수 있습니다. 또는 파일 시스템이 들어있는 장치 이름을 아는 경우 하위 수준에서 볼 수 있습니다 (예 : '/ sys/class/block/sda1 /'장치가 읽기 전용 인 경우 "1"을 포함하는'ro' 파일을 찾을 수 있습니다. –

관련 문제