日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

file_operations结构体

發布時間:2023/12/20 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 file_operations结构体 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以下讀書筆記內容,摘自宋寶華《Linux設備驅動開發詳解》一書。




(1)llseek()函數

  • 用來修改一個文件的當前讀寫位置,并將新位置返回,在出錯時,這個函數返回一個負值。

(2)read()函數

  • 用來從設備中讀取數據,成功時函數返回讀取的字節數,出錯時返回一個負值。
  • 它與用戶空間應用程序中的size_t read(int fd,void* buf,size_t count)和size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream)。
(3)write()函數

  • 向設備發送數據,成功時該函數返回寫入的字節數。如果此函數未被實現,當用戶進行 write()系統調用時,將得到-EINVAL 返回值。
  • 它與用戶空間應用程序中的size_t write(int fd,const void* buf,size_t count)和size_t fwrite(……);
(4)readdir()函數

  • 僅用于目錄,設備節點不需要實現它。

(5)ioctl()函數,即IO控制函數

  • 提供設備相關控制命令的實現(既不是讀操作也不是寫操作),當調用成功時,返回給調用程序一個非負值。
  • 內核本身識別部分控制命令,而不必調用設備驅動中的ioctl()。
  • 如果設備不提供 ioctl()函數,對于內核不能識別的命令,用戶進行 ioctl()系統調用時將獲得-EINVAL 返回值。
  • 它與用戶空間應用程序中的int fcntl(……)和int ioctl(……)
(6)mmap()函數

  • 將設備內存映射到進程的內存中(即進程的虛擬地址空間中),如果設備驅動未實現此函數,用戶進行 mmap()系統調用時將獲得-ENODEV 返回值。
  • 這個函數對于幀緩沖等設備特別有意義。幀緩沖被映射到用戶空間后,應用程序可以直接訪問它而無需在內核與應用間進行內存復制。
  • 和用戶空間應用程序中的void* mmap(……)函數對應。
(7)poll()函數

  • 一般用于詢問設備是否可被非阻塞地立即讀寫。當詢問的條件未觸發時,用戶空間進行 select()和 poll()系統調用將引起進程的阻塞。
(8)aio_read()和 aio_write()函數

  • 分別對與文件描述符對應的設備進行異步讀、寫操作。
  • 設備實現這兩個函數后,用戶空間可以對該設備文件描述符調用 aio_read()、aio_write()等系統調用進行讀寫。

(9)open()函數

  • 當用戶空間調用 Linux API 函數 open()打開設備文件時,設備驅動的 open()函數最終被調用。
  • 驅動程序可以不實現這個函數,在這種情況下,設備的打開操作永遠成功。
  • 與 open()函數對應的是 release()函數。


總結

以上是生活随笔為你收集整理的file_operations结构体的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。