首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言結構體變量定義:`static const struct file_operations mem_fops = { ... }` 解析

     編輯:程式設計綜合問答

代碼含義

static const struct file_operations mem_fops = {
    .llseek = mem_llseek,
    .read   = mem_read,
    .write  = mem_write,
    .open   = mem_open,
    .release = mem_release,
};

逐詞拆解

等價舊寫法(C89)

static const struct file_operations mem_fops = {
    mem_llseek,   // llseek
    mem_read,     // read
    mem_write,    // write
    mem_open,     // open
    mem_release   // release
};

新寫法優勢:字段順序可變、可選字段、可讀性強。

內核中如何使用

// 字符設備註冊
struct cdev my_cdev;
cdev_init(&my_cdev, &mem_fops); // 將 mem_fops 複製到 cdev->ops
cdev_add(&my_cdev, dev_num, 1);

當用戶態調用 read(fd, ...) → 內核 vfs_read → file->f_op->read → mem_read。

總結

mem_fops 後的 = 表示**定義並初始化一個 `struct file_operations` 類型的常量變量**,供後續字符設備註冊使用。這是 Linux 設備驅動編程的標準模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
關鍵字作用
static限制符號作用域僅在**當前編譯單元(.c 文件)**可見,防止符號衝突,相當於文件級 private
const聲明該變量**不可修改**,編譯器會放入 .rodata 段,運行時嘗試寫入觸發 SIGSEGV
struct file_operations類型名,內核定義的函數指針結構體(VFS 操作向量表)
mem_fops**變量名**(實例名),非類型名
= { ... }**初始化列表**(C99 指定初始化器語法),按字段名賦值函數指針