장치 드라이버가 비동기 쓰기를 구현하지 않으면 어떻게 되나요?

장치 드라이버가 비동기 쓰기를 구현하지 않으면 어떻게 되나요?

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

장치에서 데이터를 검색하는 데 사용됩니다. 이 위치에 널 포인터가 있으면 읽기 시스템 호출이 -EINVAL("잘못된 인수")과 함께 실패하게 됩니다. 음수가 아닌 반환 값은 성공적으로 읽은 바이트 수를 나타냅니다. 반환 값은 "부호 있는 크기" 유형이며 일반적으로 대상 플랫폼의 기본 정수 유형입니다.

ssize_t (*aio_read)(struct kiocb *, char __user *, size_t,loff_t);

비동기 읽기(함수가 반환되기 전에는 완료되지 않을 수 있는 읽기 작업)를 시작합니다. 이 메서드가 NULL이면 모든 작업은 읽기(동기적으로)로 처리됩니다.

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

장치에 데이터를 보냅니다. NULL인 경우 쓰기 시스템 호출을 호출한 프로그램에 -EINVAL이 반환됩니다. 음수가 아닌 경우 반환 값은 성공적으로 쓰여진 바이트 수를 나타냅니다.

ssize_t (*aio_write)(struct kiocb *, const char __user *, size_t, loff_t *);

장치에서 비동기 쓰기 작업을 시작합니다.

LDD3에서 이 설명을 사용하여 장치 드라이버가 비동기 쓰기 기능을 구현하지 않으면 어떤 일이 발생하는지 설명할 수 있는 사람이 있습니까? 비동기 읽기와 마찬가지로 자동 동기화(NULL인 경우)로 승격됩니다.

답변1

의 항목은 aio_read더 이상 사용되지 않습니다.aio_writefile_operationsread_iter, (동일하지는 않지만) 및 로 대체되었습니다 write_iter. 쓰기 가능 항목 에는 및/또는 중 하나 file_operations이상이 있어야 하며 VFS는writewrite_iter사용 가능한 것을 사용하십시오.. (미리 가용성을 확인하고 문서화하는 데 사용하십시오 FMODE_CAN_WRITE.)

aio_write그 자체가 정말로 필요하고 write_iter,-EINVAL없을시 반품. 가지다일반 구현available은 다양한 상황에서 사용할 수 있지만 대체 수단으로 자동으로 사용되지는 않습니다.

관련 정보