PHYSIO(9)

명칭
physio - 로우데바이스의 입출력의 개시

서식
<sys/param.h> <sys/systm.h> <sys/buf.h> int physio(dev_t dev, struct uio *uio, int ioflag)

해설
physio() (은)는 통상, 캐릭터형 디바이스의 read 및 write routine로부터 불려 가는 헬퍼 함수로, 사용자 프로세스의 버퍼에의 입출력을 개시시킵니다. 이 함수는 uio 구조체에 기술되고 있는 전송이 완료할 때까지, 주어졌다 strategy routine를 1 회 이상 호출합니다. strategy (을)를 호출하는 마다의 최대의 데이터 전송량은 minphys routine에 의해 결정됩니다. uio 구조체는 통상 유저 공간의 주소를 나타내므로, physio() (은)는 프로세스를 메모리중에 잠글 필요가 있습니다. 이것은, 프로세스에 P_PHYSIO 플래그를 세트 하는 것으로 행합니다. 이전에 에러 상태가 검출되었을 때를 제외해, physio() (은)는 항상 리턴 하기 전에 모든 요구된 전송이 완료할 때까지 기다립니다. 모든 경우에, bp 에게 건네지는 버퍼는 전송이 완료할 때까지의 기간중, 락( “busy” 에 마크) 됩니다.

인수의 상세를 아래와 같이에 나타냅니다.

strategy
    각각의 데이터의 덩어리를 디바이스에 입출력 개시시키기 위해서(때문에) 불린다 디바이스의 strategy routine.

bp  strategy routine로 사용되는 버퍼. 이 버퍼의 플래그는 strategy 에게 건네질 때에 B_BUSY 및 B_PHYS 하지만 세트 됩니다. 만약 bp 가 NULL 이면, 시스템의 풀로부터 할당할 수 있습니다.

dev 디바이스를 식별하기 위해서 관련지을 수 있었던 디바이스 번호.

flags
    전송 방향. 유효한 설정은 B_READ 또는 B_WRITE 마셔.

minphys
    디바이스의 strategy routine가 취급할 수가 있는 최대의 전송 사이즈를 결정하기 위해서(때문에) 불리는, 디바이스 고유의 routine.

uio 사용자 프로세스로부터 요구된 전송 전체의 기술. 현재는, uio 구조체의 ‘uio_segflg’ 플래그에 UIO_USERSPACE 이외의 값을 세트 해 건네주었을 경우의 결과는 미정도리입니다.

반환값
성공하면 physio() (은)는 0 을 돌려줍니다. uio 구조체에 나타나고 있는 주소 범위가 요구한 프로세스로부터 액세스 할 수 없는 경우에는 EFAULT (을)를 돌려줍니다. physio() (은)는 디바이스의 strategy routine를 부른 결과적으로 발생한다 모든 에러를 B_ERROR 버퍼 플래그 및 b_error 필드를 조사해 돌려줍니다. 디바이스가 “end of file” 상태를 나타내고 있을 때에는, 실제의 전송 사이즈는 uio 구조체로 요구하고 있는 사이즈보다 작아지는 일에 주의해 주세요.

관련 항목
read(2), write(2)