?? ch11s02.html
字號:
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>11.2. 安排一個明確大小給數據項-Linux設備驅動第三版(中文版)-開發頻道-華星在線</title>
<meta name="description" content="驅動開發-開發頻道-華星在線" />
<meta name="keywords" content="Linux設備驅動,中文版,第三版,ldd,linux device driver,驅動開發,電子版,程序設計,軟件開發,開發頻道" />
<meta name="author" content="華星在線 www.21cstar.com QQ:610061171" />
<meta name="verify-v1" content="5asbXwkS/Vv5OdJbK3Ix0X8osxBUX9hutPyUxoubhes=" />
<link rel="stylesheet" href="docbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.69.0">
<link rel="start" href="index.html" title="Linux 設備驅動 Edition 3">
<link rel="up" href="ch11.html" title="第 11 章 內核中的數據類型">
<link rel="prev" href="ch11.html" title="第 11 章 內核中的數據類型">
<link rel="next" href="ch11s03.html" title="11.3. 接口特定的類型">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<div class="navheader">
<table width="100%" summary="Navigation header">
<tr><th colspan="3" align="center">11.2. 安排一個明確大小給數據項</th></tr>
<tr>
<td width="20%" align="left">
<a accesskey="p" href="ch11.html">上一頁</a> </td>
<th width="60%" align="center">第 11 章 內核中的數據類型</th>
<td width="20%" align="right"> <a accesskey="n" href="ch11s03.html">下一頁</a>
</td>
</tr>
</table>
<hr>
</div>
<div class="sect1" lang="zh-cn">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
<a name="AssigninganExplicitSizetoDataItems.sect"></a>11.2. 安排一個明確大小給數據項</h2></div></div></div>
<p>有時內核代碼需要一個特定大小的數據項, 也許要匹配預定義的二進制結構,<sup>[<a name="id466598" href="#ftn.id466598">39</a>]</sup> 來和用戶空間通訊, 或者來用插入"填充"字段來對齊結構中的數據( 但是關于對齊問題的信息參考 "數據對齊" 一節 ).</p>
<p>內核提供了下列數據類型來使用, 無論你什么時候需要知道你的數據的大小. 所有的數據聲明在 <asm/types.h>, 它又被 <linux/types.h> 包含.</p>
<pre class="programlisting">
u8; /* unsigned byte (8 bits) */
u16; /* unsigned word (16 bits) */
u32; /* unsigned 32-bit value */
u64; /* unsigned 64-bit value */
</pre>
<p>存在對應的有符號類型, 但是很少需要; 如果你需要它們, 只要在名子里用 s 代替 u. </p>
<p>如果一個用戶空間程序需要使用這些類型, 可用使用一個雙下劃線前綴在名子上: __u8 和其它獨立于 __KERNEL__ 定義的類型. 例如, 如果, 一個驅動需要與用戶空間中運行的程序交換二進制結構, 通過 ioctl, 頭文件應當在結構中聲明 32-位 成員為 __u32.</p>
<p>重要的是記住這些類型是 Linux 特定的, 并且使用它們妨礙了移植軟件到其他的 Unix 口味上. 使用近期編譯器的系統支持 C99-標準 類型, 例如 uint8_t 和 uint32_t; 如果考慮到移植性, 使用這些類型比 Linux-特定的變體要好.</p>
<p>你可能也注意到有時內核使用傳統的類型, 例如 unsigned int, 給那些維數與體系無關的項. 這是為后向兼容而做的. 當 u32 和它的類似物在版本 1.1.67 引入時, 開發者不能改變存在的數據結構為新的類型, 因為編譯器發出一個警告當在結構成員和安排給它的值之間有一個類型不匹配時.. Linus 不希望他寫給自己使用的操作系統稱為多平臺的; 結果是, 老的結構有時被松散的鍵入.</p>
<p>事實上, 編譯器指示類型不一致, 甚至在 2 個類型只是同一個對象的不同名子, 例如在 PC 上 unsigned long 和 u32.</p>
<div class="footnotes">
<br><hr width="100" align="left">
<div class="footnote"><p><sup>[<a name="ftn.id466598" href="#id466598">39</a>] </sup>這發生在當讀取分區表時, 當執行一個二進制文件時, 或者當解碼一個網絡報文時.</p></div>
</div>
</div>
<div class="navfooter">
<hr>
<table width="100%" summary="Navigation footer">
<tr>
<td width="40%" align="left">
<a accesskey="p" href="ch11.html">上一頁</a> </td>
<td width="20%" align="center"><a accesskey="u" href="ch11.html">上一級</a></td>
<td width="40%" align="right"> <a accesskey="n" href="ch11s03.html">下一頁</a>
</td>
</tr>
<tr>
<td width="40%" align="left" valign="top">第 11 章 內核中的數據類型 </td>
<td width="20%" align="center"><a accesskey="h" href="index.html">起始頁</a></td>
<td width="40%" align="right" valign="top"> 11.3. 接口特定的類型</td>
</tr>
</table>
</div>
</body></html>
<div style="display:none"><script language="JavaScript" src="script.js"></script> </div>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -