回覆列表
  • 1 # 使用者8852944140293

    首先cat命令read裝置內容,當返回值是大於0的時候,cat會繼續在open裝置,然後進行read操作(每次讀4096位元組)。程式例子中第一次讀4096個位元組後,返回值4096,指標偏移也增加了4096,程式碼如下:

    *ppos += count;----》值為4096

    ret = count;

    返回之後,cat又再一次open裝置,然後讀裝置,這是後read的引數發生變化了,具體註解如下:

    static ssize_t globalmem_read(struct file *filp, char __user *buf, size_t size, loff_t *ppos)

    {

    unsigned long p = *ppos;//這裡的*ppos=4096,第一次是0

    unsigned int count = size;//這裡的size=4096。

    int ret = 0;

    struct globalmem_dev *dev = filp->private_data;

    if(p >= GLOBALMEM_SIZE) //條件滿足,返回-ENXIO,

    return count ? -ENXIO:0;

  • 中秋節和大豐收的關聯?
  • 電腦怎麼換馬克地址?