<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## 6.5.?移位一個設備 本章最后一個需要我們涉及的東西是 llseek 方法, 它有用(對于某些設備)并且容易實現. ### 6.5.1.?llseek 實現 llseek 方法實現了 lseek 和 llseek 系統調用. 我們已經說了如果 llseek 方法從設備的操作中缺失, 內核中的缺省的實現進行移位通過修改 filp->f_pos, 這是文件中的當前讀寫位置. 請注意對于 lseek 系統調用要正確工作, 讀和寫方法必須配合, 通過使用和更新它們收到的作為的參數的 offset 項. 你可能需要提供你自己的方法, 如果移位操作對應一個在設備上的物理操作. 一個簡單的例子可在 scull 驅動中找到: ~~~ loff_t scull_llseek(struct file *filp, loff_t off, int whence) { struct scull_dev *dev = filp->private_data; loff_t newpos; switch(whence) { case 0: /* SEEK_SET */ newpos = off; break; case 1: /* SEEK_CUR */ newpos = filp->f_pos + off; break; case 2: /* SEEK_END */ newpos = dev->size + off; break; default: /* can't happen */ return -EINVAL; } if (newpos < 0) return -EINVAL; filp->f_pos = newpos; return newpos; } ~~~ 唯一設備特定的操作是從設備中獲取文件長度. 在 scull 中 read 和 write 方法如需要地一樣協作, 如同在第 3 章所示. 盡管剛剛展示的這個實現對 scull 有意義, 它處理一個被很好定義了的數據區, 大部分設備提供了一個數據流而不是一個數據區(想想串口或者鍵盤), 并且移位這些設備沒有意義. 如果這就是你的設備的情況, 你不能只制止聲明 llseek 操作, 因為缺省的方法允許移位. 相反, 你應當通知內核你的設備不支持 llseek , 通過調用 nonseekable_open 在你的 open 方法中. ~~~ int nonseekable_open(struct inode *inode; struct file *filp); ~~~ 這個調用標識了給定的 filp 為不可移位的; 內核從不允許一個 lseek 調用在這樣一個文件上成功. 通過用這樣的方式標識這個文件, 你可確定不會有通過 pread 和 pwrite 系統調用的方式來試圖移位這個文件. 完整起見, 你也應該在你的 file_operations 結構中設置 llseek 方法到一個特殊的幫忙函數 no_llseek, 它定義在 <linux/fs.h>.
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看