色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Linux驅動file_operations結構體函數的作用

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-20 11:08 ? 次閱讀

寫過 Linux 驅動的小伙伴,一定對 file_operations 結構體不陌生,我們常常實現其中的 open、read、write、poll 等函數,今天為大家講解其中每個函數的作用。

1、struct module *owner;

這不是一個操作,它是一個指向擁有這個結構的模塊的指針。用來在它的操作還在被使用時阻止模塊被卸載。一般情況下, 它被簡單初始化為 THIS_MODULE, 一個在《linux/module.h》 中定義的宏。

2、loff_t (*llseek)

llseek 方法用作改變文件中的當前【讀/寫】位置, 并且新位置作為(正的)返回值。錯誤返回負值。

3、ssize_t (*read)

從設備中同步讀取數據,也就是讀節點。讀取成功返回讀取的字節數。

4、ssize_t (*write)

向設備同步發送數據,也就是寫節點。

5、ssize_t (*read_iter)

初始化一個異步讀。可能在函數返回前不結束的讀操作。如果這個方法是 NULL,所有的操作會由 read 代替進行(同步)。

6、ssize_t (*write_iter)

初始化一個異步寫。

7、int (*iterate)

迭代

8、int (*iterate_shared)

共享迭代

9、unsigned int (*poll)

poll 方法是 3 個系統調用的后端:poll, epoll, 和 select, 都用作查詢對一個或多個文件描述符的讀或寫是否會阻塞。poll 方法應當返回一個位掩碼指示是否非阻塞的讀或寫是可能的,并且提供給內核信息用來使調用進程睡眠直到可以進行讀寫。如果一個驅動的 poll 方法為 NULL,設備假定為不阻塞地可讀可寫。

10、long (*unlocked_ioctl)

kernel-2.6 以前,使用的是 ioctl;kernel-2.6 以后,使用 unlocked_ioctl。

11、long (*compat_ioctl)

兼容性的 ioctl,為了讓 32-bit 的 process 可以在 64-bit 上的 system 來執行 ioctl()

12、int (*mmap)

用來請求將設備內存映射到進程的地址空間。一般涉及到圖像方面,會使用此函數,比如 framebuffer。如果這個方法是 NULL,mmap 系統調用返回 -ENODEV。

13、int (*open)

打開文件,盡管這常常是對設備文件進行的第一個操作,不要求驅動聲明一個對應的方法。如果這個項是 NULL,設備打開一直成功,但是你的驅動不會得到通知。

14、int (*flush)

flush 操作在進程關閉它的設備文件描述符的拷貝時調用; 它應當執行(并且等待)設備的任何未完成的操作。我們很少使用 flush,SCSI 磁帶驅動使用它,為確保所有寫的數據在設備關閉前寫到磁帶上。如果 flush 為 NULL,內核簡單地忽略用戶應用程序的請求。

15、int (*release)

在文件結構被釋放時引用這個操作。

16、int (*fsync)

這個方法是 fsync 系統調用的后端, 用戶調用來刷新任何掛著的數據。 如果這個指針是 NULL, 系統調用返回 -EINVAL.

17、int (*fasync)

通知設備 FASYNC 標志發生變化,如果設備不支持異步通知,該字段可以為NULL

18、int (*lock)

lock 方法用來實現文件加鎖; 加鎖對常規文件是必不可少的特性, 但是設備驅動幾乎從不實現它。

19、ssize_t (*sendpage)

它由內核調用來發送數據, 一次一頁,到對應的文件。設備驅動實際上不實現 sendpage。

20、unsigned long (*get_unmapped_area)

這個方法的目的是在進程的地址空間找一個合適的位置來映射在底層設備上的內存段中。 這個任務通常由內存管理代碼進行; 這個方法存在為了使驅動能強制特殊設備可能有的任何的對齊請求。 大部分驅動可以置這個方法為 NULL。

21、int (*check_flags)

這個方法允許模塊檢查傳遞給 fnctl(F_SETFL.。.) 調用的標志。

22、int (*flock)

為解決多進程對同一文件的讀寫沖突,在 Linux 系統中,提供了 flock 這一系統調用,用來實現對文件的讀寫保護,即文件鎖的功能。

23、ssize_t (*splice_write)

類似于 write,splice 用于在兩個文件描述符之間移動數據,是一種重要零拷貝技術。

24、ssize_t (*splice_read)

類似于 read,splice 用于在兩個文件描述符之間移動數據,是一種重要零拷貝技術。

25、int (*setlease)

設置租約?

26、long (*fallocate)

快速創建文件。

27、void (*show_fdinfo)

展示 fd 文件描述符的信息。

28、unsigned (*mmap_capabilities)

mmap 的權限限制信息。

29、ssize_t (*copy_file_range)

Copy a range of data from one file to another.

30、int (*clone_file_range)

將一系列的數據從一個文件復制到另一個文件,希望在這一過程中能以比較優化的方式來完成。

31、ssize_t (*dedupe_file_range)

用于將文件一定范圍內的重復數據消除。

一般情況下,大家只需要實現最常見幾個就可以,比如 llseek、open、read、write、poll 、unlocked_ioctl、mmap、flush 等。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1840

    瀏覽量

    85307
  • Linux
    +關注

    關注

    87

    文章

    11310

    瀏覽量

    209597
  • 函數
    +關注

    關注

    3

    文章

    4332

    瀏覽量

    62653
收藏 人收藏

    評論

    相關推薦

    ArmSoM系列板卡 嵌入式Linux驅動開發實戰指南 之 字符設備驅動

    的抽象,字符設備設計思路; 字符設備相關的概念以及數據結構,了解設備號等基本概念以及file_operationsfile、inode相關數據結構; 字符字符設備
    的頭像 發表于 04-10 09:53 ?1074次閱讀
    ArmSoM系列板卡 嵌入式<b class='flag-5'>Linux</b><b class='flag-5'>驅動</b>開發實戰指南 之 字符設備<b class='flag-5'>驅動</b>

    嵌入式Linux字符驅動LED燈設計

    );MODULE_LICENSE("GPL");2)Linux字符IO驅動設計步驟如下:1.定義描述字符IO設備的結構Linux中,每個
    發表于 02-03 14:28

    編譯字符設備驅動file_operations結構問題?

    file_operations tdd_fops = {read:read_test,open:open_test,release:release_test,};int init_module(void) { int
    發表于 03-31 09:13

    編譯字符設備驅動file_operations結構問題?

    file_operations tdd_fops = {read:read_test,openpen_test,release:release_test,};int init_module(void
    發表于 03-31 09:30

    linux驅動-Input輸入子系統

    file_operations結構中的函數。在Input子系統中,這些步驟會分布到不同的層中,最后三個層通過一些聯系構成了一個完整的驅動
    發表于 05-21 00:05

    十一天學會Linux驅動編程(第十天)

    。如上圖所示紅框中的函數“void cdev_init(struct cdev *, const struct file_operations *)”和結構“cdev”。cdev_i
    發表于 01-22 22:24

    芯靈思Sinlinx A33實現linux led驅動

    驅動(和塊設備驅動),注意這里并不是驅動文件設備節點!4) Linux使用file_operations
    發表于 12-25 12:10

    帶大家走進嵌入式Linux-arm驅動開發

    一、本文將會以最簡單的LED驅動程序帶大家走進嵌入式Linux-arm驅動開發,首先,來了解一下最簡單的驅動框架。1.首先struct file_o
    發表于 12-15 07:59

    file_operations函數詳解

    struct file_operations,struct module *owner; // 指向擁有該結構的模塊的指針,避免正在操作時被卸載,一般為初始化為THIS_MODULES
    發表于 06-16 11:30 ?4919次閱讀

    LCD的ARM編程方式,LCD Linux程序如何寫入?

    目前還沒有討論的 file_operations 方法是 ioctl ()。用戶應用程序使用 ioctrl 系統調用操作 LCD 硬件。fb_ops 結構中定義的方法為這些操作提供支 持。注意
    發表于 05-25 14:48 ?1676次閱讀
    LCD的ARM編程方式,LCD <b class='flag-5'>Linux</b>程序如何寫入?

    用戶與內核空間數據交換的方式之一seq_file

    要想使用seq_file功能,開發者需要包含頭文件linux/seq_file.h,并定義與設置一個seq_operations結構(類似于
    發表于 05-14 15:34 ?1519次閱讀

    深入剖析Linux文件系統的架構

    函數都必須由底層派生出的實例實現,使用成員函數 file_operations。在linux里面的文件操作,底層都要實現file_operatio
    發表于 05-16 09:15 ?1056次閱讀
    深入剖析<b class='flag-5'>Linux</b>文件系統的架構

    Linux內核如何使用結構函數指針?

    我將結合具體的Linux內核驅動框架代碼來展示Linux內核如何使用結構函數指針。
    的頭像 發表于 09-06 14:17 ?1028次閱讀
    <b class='flag-5'>Linux</b>內核如何使用<b class='flag-5'>結構</b><b class='flag-5'>體</b>和<b class='flag-5'>函數</b>指針?

    Linux驅動函數接口說明

    *parent, void *data, const struct file_operations *fops); name :要創建的 /sys/kernel/debug 下的目錄名 parent
    的頭像 發表于 09-27 11:20 ?474次閱讀

    怎么編寫Framebuffer驅動程序

    Framebuffer 驅動程序框架 分為上下兩層: fbmem.c:承上啟下 實現、注冊 file_operations 結構 把 APP 的調用向下轉發到
    的頭像 發表于 03-22 09:13 ?566次閱讀
    怎么編寫Framebuffer<b class='flag-5'>驅動</b>程序
    主站蜘蛛池模板: 亚洲中文无码亚洲人在线观看- | 微福利92合集| caoporn 超碰免费视频| 久热人人综合人人九九精品视频| 亚洲欧美无码2017在线| 国产最新精品亚洲2021不卡| 性白俄罗斯高清xxxxx| 国产精品成人免费观看| 四虎影视库永久免费| 国产成人精品免费视频大全办公室| 全是肉的高h短篇列车| 成人在线免费观看| 色mimi| 俺也去最新地址| 日韩av国产av欧美天堂社区| 纯肉无码AV在线看免费看 | 奶水四溅54p| 99精品电影一区二区免费看| 欧美不卡一区二区三区| 99视频全部看免费观| 青青草国产精品久久| 丰满少妇67194视频| 翁公吮她的花蒂和奶水| 国产一区二区内射最近更新| 亚洲专区区免费| 美女18黄| 动漫H片在线观看播放免费| 无码人妻丰满熟妇区五十路久久 | 亚洲精品久久久午夜福利电影网 | 在线视频 亚洲| 男人大臿蕉香蕉大视频| 成人精品视频在线| 无码骚夜夜精品| 久久国产精品高清一区二区三区| 51久久夜色精品国产| 日本高清二区| 国自产拍 高清精品| 92看看福利午夜影院| 日韩亚洲欧美中文在线| 国色天香视频在线社区| 99久久免热在线观看6|