file_operations结构体
生活随笔
收集整理的這篇文章主要介紹了
file_operations结构体
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
以下讀書筆記內(nèi)容,摘自宋寶華《Linux設(shè)備驅(qū)動開發(fā)詳解》一書。
(1)llseek()函數(shù)
- 用來修改一個(gè)文件的當(dāng)前讀寫位置,并將新位置返回,在出錯時(shí),這個(gè)函數(shù)返回一個(gè)負(fù)值。
(2)read()函數(shù)
- 用來從設(shè)備中讀取數(shù)據(jù),成功時(shí)函數(shù)返回讀取的字節(jié)數(shù),出錯時(shí)返回一個(gè)負(fù)值。
- 它與用戶空間應(yīng)用程序中的size_t read(int fd,void* buf,size_t count)和size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream)。
- 向設(shè)備發(fā)送數(shù)據(jù),成功時(shí)該函數(shù)返回寫入的字節(jié)數(shù)。如果此函數(shù)未被實(shí)現(xiàn),當(dāng)用戶進(jìn)行 write()系統(tǒng)調(diào)用時(shí),將得到-EINVAL 返回值。
- 它與用戶空間應(yīng)用程序中的size_t write(int fd,const void* buf,size_t count)和size_t fwrite(……);
- 僅用于目錄,設(shè)備節(jié)點(diǎn)不需要實(shí)現(xiàn)它。
(5)ioctl()函數(shù),即IO控制函數(shù)
- 提供設(shè)備相關(guān)控制命令的實(shí)現(xiàn)(既不是讀操作也不是寫操作),當(dāng)調(diào)用成功時(shí),返回給調(diào)用程序一個(gè)非負(fù)值。
- 內(nèi)核本身識別部分控制命令,而不必調(diào)用設(shè)備驅(qū)動中的ioctl()。
- 如果設(shè)備不提供 ioctl()函數(shù),對于內(nèi)核不能識別的命令,用戶進(jìn)行 ioctl()系統(tǒng)調(diào)用時(shí)將獲得-EINVAL 返回值。
- 它與用戶空間應(yīng)用程序中的int fcntl(……)和int ioctl(……)
- 將設(shè)備內(nèi)存映射到進(jìn)程的內(nèi)存中(即進(jìn)程的虛擬地址空間中),如果設(shè)備驅(qū)動未實(shí)現(xiàn)此函數(shù),用戶進(jìn)行 mmap()系統(tǒng)調(diào)用時(shí)將獲得-ENODEV 返回值。
- 這個(gè)函數(shù)對于幀緩沖等設(shè)備特別有意義。幀緩沖被映射到用戶空間后,應(yīng)用程序可以直接訪問它而無需在內(nèi)核與應(yīng)用間進(jìn)行內(nèi)存復(fù)制。
- 和用戶空間應(yīng)用程序中的void* mmap(……)函數(shù)對應(yīng)。
- 一般用于詢問設(shè)備是否可被非阻塞地立即讀寫。當(dāng)詢問的條件未觸發(fā)時(shí),用戶空間進(jìn)行 select()和 poll()系統(tǒng)調(diào)用將引起進(jìn)程的阻塞。
- 分別對與文件描述符對應(yīng)的設(shè)備進(jìn)行異步讀、寫操作。
- 設(shè)備實(shí)現(xiàn)這兩個(gè)函數(shù)后,用戶空間可以對該設(shè)備文件描述符調(diào)用 aio_read()、aio_write()等系統(tǒng)調(diào)用進(jìn)行讀寫。
(9)open()函數(shù)
- 當(dāng)用戶空間調(diào)用 Linux API 函數(shù) open()打開設(shè)備文件時(shí),設(shè)備驅(qū)動的 open()函數(shù)最終被調(diào)用。
- 驅(qū)動程序可以不實(shí)現(xiàn)這個(gè)函數(shù),在這種情況下,設(shè)備的打開操作永遠(yuǎn)成功。
- 與 open()函數(shù)對應(yīng)的是 release()函數(shù)。
總結(jié)
以上是生活随笔為你收集整理的file_operations结构体的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 兄弟HL-1118加粉清零
- 下一篇: vs code 小霸王插件本地nes游戏