2010-05-06 5 views
2

어딘가에 동일한 파일을 두 번 열 때 정의되지 않은 의미가 있으므로 읽지 마십시오. 필자의 상황에서는 여러 파일 기술자를 여러 번 연결하여 내 장치를 여러 번 열어보고 싶습니다. 내 장치의 파일 작업은 모두 안전합니다. sys 호출 open()과 등록 된 파일 operation.open()을 호출하는 시점 사이에 Linux의 일부가 안전하지 않습니까?Linux에서 사용자 프로그램에서 내 장치 드라이버를 동시에 두 번 열어도됩니까?

답변

3

드라이버가 정상적으로 작동하는 한 동일한 장치 파일을 두 번 열어도됩니다. 커널에서 안전하다면 안전하지 못하게하는 숨겨진 부분이 없습니다.

예를 들어 일부 비디오 응용 프로그램은 한 프로세스를 사용하여 표시 또는 캡처를 수행하고 다른 비디오 응용 프로그램은 컨트롤을 처리 할 장치 파일을 엽니 다.

드라이버가 다중 열림을 지원하지 않으면 두 번째 열림이 발생할 때 오류를 반환해야합니다.

1

동일한 프로세스에서 드라이버를 두 번 열 수 있습니다 (드라이버에서 그렇게 할 수있는 경우). 동기화는 드라이버의 책임입니다.

그러나 원시 디스크 장치를 권한있는 사용자로 여는 경우 자신의 프로세스에서 자신의 데이터가 잘리지 않도록해야합니다.

1

동일한 파일을 두 번 열면 이해할 수있는 경우에 잘 정의 된 의미가 있습니다. 프로세스가 모두 읽기/쓰기를 수행하는 경우 여전히 동기화가 필요합니다. 그렇지 않으면 파일이 쓰레기로 가득 찰 것입니다.

장치 드라이버의 경우, 다중 열기의 의미는 전적으로 드라이버에 달려 있습니다. 일부 드라이버는 그것을 금지하고, 다른 드라이버에서는 잘 동작합니다 (예 :/dev/null). 일부 드라이버의 경우 매우 특별한 의미가 있습니다 (예 : 사운드 카드가 여러 앱간에 사운드 출력을 혼합 할 수 있음)

관련 문제