<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7230785070080903190</id><updated>2011-10-06T15:24:08.078-07:00</updated><category term='生活'/><category term='工作'/><title type='text'>磨刀不误砍柴工</title><subtitle type='html'>system administration is a craft</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default?start-index=101&amp;max-results=100'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>251</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5503171046142961251</id><published>2011-01-28T19:21:00.000-08:00</published><updated>2011-01-29T18:54:22.702-08:00</updated><title type='text'>partition table与parted程序</title><content type='html'>N多LUN(iscsi盘）需要分区，手动太痛苦了。只能找non-interaction型的分区工具， 比如parted这个程序。&lt;br /&gt;在分区之前有一个概念需要先明白的：partition table, 也叫disklabel&lt;br /&gt;&lt;br /&gt;之所以使用parted才需要注意到partition table， 是因为我们常常使用的fdisk已经帮我们选择了msdos类型的partition table。所以从fdisk转到parted后，会有点小疑问。&lt;br /&gt;&lt;br /&gt;平时我们印象中：一个硬盘只能有4个主分区，或者3个主分区1个扩展分区。&lt;br /&gt;这其实只是`msdos` partition table的限制。GPT就没有这种问题：http://en.wikipedia.org/wiki/GUID_Partition_Table&lt;br /&gt;&lt;br /&gt;msdos partition table这个名词是从parted程序引用的:&lt;br /&gt;[liangqingxi@hotspare ~]$ sudo /sbin/parted /dev/sdc print&lt;br /&gt;Error: Unable to open /dev/sdc - unrecognised disk label. &lt;br /&gt;&lt;br /&gt;[jessinio@niowork ~]$ sudo parted /dev/sda print&lt;br /&gt;[sudo] password for jessinio: &lt;br /&gt;&lt;br /&gt;Model: ATA ST3250310AS (scsi)&lt;br /&gt;Disk /dev/sda: 250GB&lt;br /&gt;Sector size (logical/physical): 512B/512B&lt;br /&gt;Partition Table: msdos&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;但是从wikipedia里查的信息表明, 这与BIOS被广泛使用有着很大的关系(比如,BIOS的引导过程)&lt;br /&gt;感觉上， 称为｀PC compatibles｀更好一点：&lt;br /&gt;&lt;br /&gt;信息1. In the world of IBM PC compatibles, disks are usually partitioned using the PC BIOS's MBR Partition Table scheme instead&lt;br /&gt;信息2. The role of the BIOS has changed over time; today BIOS is a legacy system, superseded by the more complex EFI (EFI), but BIOS remains in widespread use, and EFI booting has only been supported in Microsoft OS products supporting GPT and Linux Kernels 2.6.1 and greater builds&lt;br /&gt;&lt;br /&gt;当硬盘没有、或者程序无法认别partition table时会有如下信息：&lt;br /&gt;[liangqingxi@hotspare ~]$ sudo /sbin/fdisk -l /dev/sdc &lt;br /&gt;&lt;br /&gt;Disk /dev/sdc: 1000.2 GB, 1000204886016 bytes&lt;br /&gt;255 heads, 63 sectors/track, 121601 cylinders&lt;br /&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;br /&gt;&lt;br /&gt;Disk /dev/sdc doesn't contain a valid partition table&lt;br /&gt;&lt;br /&gt;在fdisk的手册中有这样的记载：fdisk doesn’t understand GUID Partition Table (GPT)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;在知道partition table这一概念后, 使用parted命令将是非常容易的. 就不记录了.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5503171046142961251?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5503171046142961251/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2011/01/parted.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5503171046142961251'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5503171046142961251'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2011/01/parted.html' title='partition table与parted程序'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7733567579611011315</id><published>2011-01-28T00:21:00.000-08:00</published><updated>2011-01-28T00:24:44.853-08:00</updated><title type='text'>gpg使用</title><content type='html'>I. 基本概念&lt;br /&gt;1. key、public key、private key&lt;br /&gt;文档： http://en.wikipedia.org/wiki/Public-key_cryptography&lt;br /&gt;gpg使用--gen-key 命令生成的key种类有：&lt;br /&gt;  (1) DSA and Elgamal (default)&lt;br /&gt;  (2) DSA (sign only)&lt;br /&gt;  (5) RSA (sign only)&lt;br /&gt;DSA and Elgamal支持加密和签名&lt;br /&gt;单独的DSA、RSA只支持签名&lt;br /&gt;2. 加密与签名&lt;br /&gt;关于签名与加密这两个概念需要明白：&lt;br /&gt;&lt;br /&gt;Use of these keys allows protection of the authenticity of a message by creating a digital signature of a message using the private key, which can be verified using the public key. It also allows protection of the confidentiality and integrity of a message, by public key encryption, encrypting the message using the public key, which can only be decrypted using the private key.&lt;br /&gt;private key 加密， public key解密，称为签名&lt;br /&gt;public key 加密， private key解密， 称为加密&lt;br /&gt;II. key管理&lt;br /&gt;1. 查看&lt;br /&gt;分为public key的查看和private key的查看：&lt;br /&gt;[jessinio@niowork ~]$ gpg --list-keys&lt;br /&gt;/home/jessinio/.gnupg/pubring.gpg&lt;br /&gt;---------------------------------&lt;br /&gt;pub   1024D/140A3126 2011-01-26&lt;br /&gt;uid                  jessinio.liang (liang qingxi) &lt;jessinio@gmail.com&gt;&lt;br /&gt;sub   2048g/94134411 2011-01-26&lt;br /&gt;[jessinio@niowork ~]$ gpg --list-secret-keys&lt;br /&gt;/home/jessinio/.gnupg/secring.gpg&lt;br /&gt;---------------------------------&lt;br /&gt;sec   1024D/140A3126 2011-01-26&lt;br /&gt;uid                  jessinio.liang (liang qingxi) &lt;jessinio@gmail.com&gt;&lt;br /&gt;ssb   2048g/94134411 2011-01-26&lt;br /&gt;2. 导出/导入/删除&lt;br /&gt;也分为private key和public key:&lt;br /&gt;[jessinio@niowork ~]$ gpg --armor --export 140A3126&lt;br /&gt;[jessinio@niowork ~]$ gpg --armor --export-secret-key 140A3126&lt;br /&gt;同理，删除是使用--delete-key和--delete-secret-key子命令完成。&lt;br /&gt;II. key使用&lt;br /&gt;1. 签名&lt;br /&gt;使用jessinio@gmail.com的private  key签名&lt;br /&gt;$ gpg --output doc.sig --sign doc&lt;br /&gt;用户jessinio测试数据：&lt;br /&gt;[jessinio@niowork ~]$ gpg --verify doc.gpg&lt;br /&gt;gpg: Signature made Fri 28 Jan 2011 02:31:06 PM CST using DSA key ID 140A3126&lt;br /&gt;gpg: Good signature from "jessinio.liang (liang qingxi) &lt;jessinio@gmail.com&gt;"&lt;br /&gt;用户jessinio解开签名数据：&lt;br /&gt;[jessinio@niowork ~]$ gpg --output doc --decrypt doc.gpg&lt;br /&gt;1.1 detach sign&lt;br /&gt;签名后的数据在没有解开的情况下是无法使用的， 所以有时为了方便数据的查看， 会把签名与数据分开， 这种叫detach sign&lt;br /&gt;2. 加密/解密&lt;br /&gt;使用jessinio@gmail.com的public  key加密&lt;br /&gt;＄ gpg --output doc.gpg --encrypt --recipient jessinio@gmail.com doc&lt;br /&gt;解密与解开签名了的数据是一样行为。&lt;br /&gt;3. 对称加密&lt;br /&gt;[jessinio@niowork tmp]$ gpg --output 11  -c testfile.tar.gz&lt;br /&gt;[jessinio@niowork tmp]$ file 11&lt;br /&gt;11: DOS executable (COM)&lt;br /&gt;[jessinio@niowork tmp]$ diff testfile.tar.gz 11&lt;br /&gt;Binary files testfile.tar.gz and 11 differ&lt;br /&gt;[jessinio@niowork tmp]$ gpg --output 11.tar.gz -d 11&lt;br /&gt;gpg: CAST5 encrypted data&lt;br /&gt;gpg: encrypted with 1 passphrase&lt;br /&gt;gpg: WARNING: message was not integrity protected&lt;br /&gt;[jessinio@niowork tmp]$ diff 11.tar.gz testfile.tar.gz&lt;br /&gt;[jessinio@niowork tmp]$&lt;br /&gt;&lt;br /&gt;gpg的完整使用手册： http://www.gnupg.org/gph/en/manual.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7733567579611011315?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7733567579611011315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2011/01/gpg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7733567579611011315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7733567579611011315'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2011/01/gpg.html' title='gpg使用'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3298378550486507425</id><published>2011-01-08T06:07:00.001-08:00</published><updated>2011-01-08T06:07:12.310-08:00</updated><title type='text'>硬盘, 接口, RAID</title><content type='html'>&amp;#26412;&amp;#25991;&amp;#19981;&amp;#24819;&amp;#35760;&amp;#24405;&amp;#20851;&amp;#20110;RAID&amp;#30340;&amp;#31181;&amp;#31867;&amp;#21644;&amp;#23427;&amp;#30340;&amp;#23433;&amp;#35013;&amp;#20043;&amp;#31867;&amp;#30340;&amp;#65292;&amp;#21482;&amp;#26159;&amp;#24819;&amp;#20889;&amp;#20851;&amp;#20110;RAID&amp;#19982;&amp;#23427;&amp;#32972;&amp;#21518;&amp;#30340;&amp;#30828;&amp;#30424;&amp;#30340;&amp;#19968;&amp;#20123;&amp;#31616;&amp;#21333;&amp;#20449;&amp;#24687;&amp;#12290;&lt;br&gt;&amp;#36825;&amp;#26679;&amp;#26377;&amp;#21033;&amp;#20110;SA&amp;#20102;&amp;#35299;&amp;#33258;&amp;#24049;&amp;#31649;&amp;#29702;&amp;#30340;&amp;#30828;&amp;#20214;&amp;#30340;&amp;#19968;&amp;#20123;&amp;#20855;&amp;#20307;&amp;#24773;&amp;#20917;&amp;#65292;&amp;#21450;&amp;#27491;&amp;#30830;&amp;#22320;&amp;#20351;&amp;#29992;&amp;#30456;&amp;#24212;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#25105;&amp;#20043;&amp;#25152;&amp;#20197;&amp;#20250;&amp;#21435;&amp;#20102;&amp;#35299;&amp;#36825;&amp;#20123;&amp;#20449;&amp;#24687;&amp;#65292; &amp;#20027;&amp;#35201;&amp;#26159;&amp;#22240;&amp;#20026;&amp;#65306;&lt;br&gt;&amp;nbsp;* &amp;#25105;&amp;#26080;&amp;#27861;&amp;#27491;&amp;#30830;&amp;#20102;&amp;#35299;&amp;#21040;&amp;#22312;RAID&amp;#32972;&amp;#21518;&amp;#30340;&amp;#30828;&amp;#30424;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#65288;&amp;#22914;&amp;#20581;&amp;#24247;&amp;#24773;&amp;#20917;&amp;#12289;&amp;#23481;&amp;#37327;&amp;#12289;&amp;#22411;&amp;#21495;&amp;#65289;&lt;br&gt;&amp;#20316;&amp;#20026;SA&amp;#23601;&amp;#22522;&amp;#26412;&amp;#35201;&amp;#28165;&amp;#26970;&amp;#33258;&amp;#24049;&amp;#31649;&amp;#29702;&amp;#30340;&amp;#30828;&amp;#20214;&amp;#24773;&amp;#20917;&amp;#12290;&lt;br&gt;&lt;h2&gt;&amp;#25509;&amp;#21475;&lt;/h2&gt;&amp;#24320;&amp;#22987;&amp;#21069;&amp;#65292; &amp;#20063;&amp;#22238;&amp;#39038;&amp;#19968;&amp;#19979;&amp;#30828;&amp;#20214;&amp;#25509;&amp;#21475;&amp;#30340;&amp;#21464;&amp;#36801;&lt;br&gt;&amp;#25105;&amp;#20204;&amp;#24179;&amp;#26102;&amp;#24120;&amp;#24120;&amp;#20250;&amp;#30475;&amp;#21040;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#19968;&amp;#20123;&amp;#21517;&amp;#35789;&amp;#65306;&lt;br&gt;* SCSI. SAS&lt;br&gt;* ATA. IDE. SATA. eSTAT&lt;br&gt;* iSCSI&lt;br&gt;&lt;br&gt;&amp;#21457;&amp;#23637;&amp;#36807;&amp;#31243;: AT -&amp;gt; ATA -&amp;gt; IDE&lt;br&gt;&lt;div style="margin-left:40px"&gt;The current Parallel ATA standard is the result of a long history of incremental technical development, which began with the original AT Attachment interface, developed for use in early &lt;a class="mw-redirect" href="http://en.wikipedia.org/wiki/PC_AT" title="PC AT"&gt;PC AT&lt;/a&gt; equipment. The ATA interface itself evolved in several stages from &lt;a href="http://en.wikipedia.org/wiki/Western_Digital" title="Western Digital"&gt;Western Digital&lt;/a&gt;&amp;#39;s original &lt;b&gt;Integrated Drive Electronics (IDE)&lt;/b&gt; interface.&lt;/div&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;ATA&amp;#37117;&amp;#26159;&amp;#24182;&amp;#21475;(parallel)&amp;#30340;&amp;#12290;&amp;#28982;&amp;#21518;&amp;#21457;&amp;#23637;&amp;#20026;&amp;#20018;&amp;#21475; serial ATA&amp;#12290; &amp;#20063;&amp;#23601;&amp;#26159;SATA&lt;br&gt;&lt;br&gt;&amp;#33267;&amp;#20110;SCSI&amp;#65292; &amp;#21644;ATA&amp;#30340;&amp;#21457;&amp;#23637;&amp;#26377;&amp;#24456;&amp;#22823;&amp;#30340;&amp;#30456;&amp;#20284;&amp;#24230;&amp;#12290; SCSI (&lt;b&gt;Small Computer System Interface&lt;/b&gt;)&amp;#20063;&amp;#26159;&amp;#19968;&amp;#31181;&amp;#25509;&amp;#21475;&amp;#25216;&amp;#26415;&amp;#65292; &amp;#28982;&amp;#21518;&amp;#21457;&amp;#29616;&amp;#21040;&amp;#20102;&amp;#20018;&amp;#21475;&amp;#30340;SAS(&lt;b&gt;Serial Attached SCSI&lt;/b&gt;).&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#26159;&amp;#24179;&amp;#26102;&amp;#24120;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#30828;&amp;#30424;&amp;#25509;&amp;#21475;&amp;#30340;&amp;#20004;&amp;#22823;&amp;#31867;&amp;#30340;&amp;#21382;&amp;#21490;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#20102;&amp;#35299;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#25509;&amp;#21475;&amp;#21382;&amp;#21490;&amp;#22909;&amp;#12290; &amp;#20808;&amp;#26469;&amp;#23567;&amp;#35797;&amp;#29275;&amp;#21147;: &amp;#20351;&amp;#29992;smartctl&amp;#30340;&amp;#39;-d&amp;#39;&amp;#21442;&amp;#25968;&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;-d TYPE, --device=TYPE&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specifies&amp;nbsp; the&amp;nbsp; type of the device.&amp;nbsp; The valid arguments to this option are ata, scsi, &lt;font style="background-color:#ea9999"&gt;sat&lt;/font&gt;, marvell, &lt;font style="background-color:#d0e0e3"&gt;3ware,N, and hpt,L/M, cciss,N or hpt,L/M/N&lt;/font&gt;. &lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#20102;&amp;#35299;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#25509;&amp;#21475;&amp;#65292;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#22823;&amp;#27010;&amp;#30693;&amp;#36947;&amp;#24590;&amp;#20040;&amp;#36873;&amp;#25321;&amp;#36825;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#20102;&amp;#12290;&lt;br&gt;&amp;nbsp;* &amp;#23545;&amp;#20110;marvell&amp;#25509;&amp;#21475;&amp;#65292; &amp;#25105;&amp;#20174;&amp;#26469;&amp;#23601;&amp;#25509;&amp;#35302;&amp;#36807;&amp;#65292;&amp;#25152;&amp;#20197;&amp;#19981;&amp;#35828;&amp;#23427;&amp;#20102;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#20294;&amp;#26159;&amp;#65292;&amp;#36824;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#26377;&amp;#24847;&amp;#24605;&amp;#30340;&amp;#31867;&amp;#22411;&amp;#65306; sat&lt;br&gt;&lt;br&gt;&amp;#20851;&amp;#20110; SAT&amp;#25551;&amp;#36848;&amp;#22914;&amp;#19979; :&lt;br&gt;&lt;div style="margin-left:40px"&gt;The &amp;acute;sat&amp;acute; device type is for ATA disks that have a SCSI to ATA Translation (SAT) Layer (SATL) between the disk and the operating&amp;nbsp; system. &lt;/div&gt;&lt;br&gt;&amp;#20026;&amp;#20013;&amp;#38388;&amp;#20135;&amp;#29289;&amp;#65292; &amp;#20063;&amp;#23601;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#35753;SATA&amp;#25509;&amp;#21475;&amp;#30828;&amp;#30424;&amp;#25509;&amp;#25910;SCSI&amp;#30340;&amp;#25351;&amp;#20196;&amp;#38598;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#33267;&amp;#20110;&amp;#20026;&amp;#20160;&amp;#20040;Linux&amp;#20250;&amp;#25226;SATA&amp;#30828;&amp;#30424;&amp;#21629;&amp;#21517;&amp;#25104;sdx&amp;#65292; &amp;#26159;&amp;#19981;&amp;#26159;&amp;#22240;&amp;#20026;&amp;#36825;&amp;#20010;&amp;#21407;&amp;#22240;&amp;#25105;&amp;#26080;&amp;#27861;&amp;#26597;&amp;#35810;&amp;#21040;&amp;#30456;&amp;#20851;&amp;#20449;&amp;#24687;&amp;#12290;&lt;/font&gt;&lt;br&gt;&lt;h2&gt;RAID&lt;/h2&gt;&amp;#22312;&amp;#24320;&amp;#22987;RAID&amp;#30828;&amp;#20214;&amp;#21069;&amp;#65292; &amp;#36824;&amp;#26377;&amp;#20960;&amp;#20010;&amp;#21517;&amp;#35789;&amp;#35201;&amp;#30693;&amp;#36947;&amp;#65306;&lt;br&gt;1. host adapter, &amp;#20855;&amp;#20307;&amp;#35831;&amp;#35265;&amp;#65306; http://en.wikipedia.org/wiki/Host_adapter&lt;br&gt;2. RAID controller, &amp;#20855;&amp;#20307;&amp;#35831;&amp;#35265;&amp;#65306; http://en.wikipedia.org/wiki/Disk_array_controller&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20004;&amp;#20010;&amp;#21517;&amp;#35789;&amp;#21644;&amp;#24179;&amp;#26102;&amp;#25152;&amp;#35762;&amp;#30340;&amp;ldquo;RAID card&amp;ldquo;&amp;#26159;&amp;#25351;&amp;#21516;&amp;#19968;&amp;#31181;&amp;#35774;&amp;#22791;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#30001;&amp;#20110;RAID&amp;#25226;&amp;#32972;&amp;#21518;&amp;#30340;&amp;#30828;&amp;#30424;&amp;#24773;&amp;#20917;&amp;#38544;&amp;#34255;&amp;#20102;&amp;#65292;&amp;#25152;&amp;#20197;SA&amp;#35201;&amp;#21462;&amp;#24471;&amp;#30828;&amp;#30424;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#23601;&amp;#25104;&amp;#38382;&amp;#39064;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#20174;smartctl&amp;#24037;&amp;#20855;&amp;#30340;&amp;#25991;&amp;#26723;&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;http://sourceforge.net/apps/trac/smartmontools/wiki/Supported_RAID-Controllers&lt;br&gt;&lt;/div&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;&amp;#65306; &amp;#35201;&amp;#24471;&amp;#21040;RAID&amp;#21345;&amp;#21518;&amp;#38754;&amp;#30828;&amp;#30424;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#65292;SA&amp;#39318;&amp;#20808;&amp;#20174;&amp;#20247;&amp;#22810;&amp;#30340;&amp;#22411;&amp;#21495;&amp;#20013;&amp;#25214;&amp;#20986;&amp;#28385;&amp;#36275;&amp;#33258;&amp;#24049;&amp;#30340;RAID&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#33267;&amp;#20110;&amp;#19990;&amp;#30028;&amp;#19978;&amp;#36824;&amp;#26377;&amp;#22810;&amp;#23569;&amp;#36824;&amp;#27809;&amp;#26377;RAID&amp;#21345;&amp;#65288;&amp;#33455;&amp;#29255;&amp;#65289;&amp;#29983;&amp;#20135;&amp;#21830;&amp;#26159;&lt;font style="background-color:#b6d7a8"&gt;smartctl&lt;/font&gt;&amp;#30446;&amp;#21069;&amp;#20026;&amp;#27490;&amp;#36824;&amp;#27809;&amp;#26377;&amp;#25903;&amp;#25345;&amp;#30340;&amp;#65292; &amp;#25105;&amp;#20063;&amp;#26080;&amp;#27861;&amp;#26597;&amp;#35810;&amp;#21040;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#36824;&amp;#26159;&amp;#65292;&amp;#21487;&amp;#20197;&amp;#32943;&amp;#23450;&amp;#30340;&amp;#26159;&amp;#65306; SA&amp;#21487;&amp;#20197;&amp;#20511;&amp;#21161;&amp;#29983;&amp;#20135;&amp;#21830;&amp;#33258;&amp;#24049;&amp;#24320;&amp;#21457;&amp;#30340;RAID&amp;#30828;&amp;#20214;&amp;#25903;&amp;#25345;&amp;#24037;&amp;#20855;&amp;#12290;&amp;#27604;&amp;#22914;&amp;#36825;&amp;#20010;URL&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;http://www.lsi.com/storage_home/products_home/internal_raid/megaraid_scsi/megaraid_scsi_3200/index.html#Miscellaneous&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3298378550486507425?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3298378550486507425/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2011/01/raid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3298378550486507425'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3298378550486507425'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2011/01/raid.html' title='硬盘, 接口, RAID'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-9018432402023366271</id><published>2011-01-04T06:03:00.001-08:00</published><updated>2011-01-04T07:48:25.439-08:00</updated><title type='text'>linux kernel and modules</title><content type='html'>&amp;#26412;&amp;#25991;&amp;#20027;&amp;#35201;&amp;#26159;&amp;#22238;&amp;#39038;linux modules&amp;#36825;&amp;#37096;&amp;#20998;&amp;#30340;&amp;#31649;&amp;#29702;.&lt;br&gt;&lt;br&gt;system administrator &amp;#20351;&amp;#29992;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#22788;&amp;#29702;CLI&amp;#21629;&amp;#20196;&amp;#20027;&amp;#35201;&amp;#26159;&amp;#22914;&amp;#19979;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#21253;:&lt;br&gt;$ dpkg -S $(which modprobe)&lt;br&gt;module-init-tools: /sbin/modprobe&lt;br&gt;&lt;h2&gt;kernel module&amp;#32534;&amp;#35793;&lt;/h2&gt;&amp;#36825;&amp;#19968;&amp;#31687;&amp;#25991;&amp;#31456;: http://www.cyberciti.biz/tips/compiling-linux-kernel-module.html&lt;br&gt;&amp;#35762;&amp;#36848;&amp;#20102;&amp;#22914;&amp;#20309;&amp;#32534;&amp;#35793;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#20889;&amp;#30340;module, &amp;#30456;&amp;#24403;&amp;#19981;&amp;#38169;.&lt;br&gt;&amp;#20294;&amp;#26159;&amp;#23569;&amp;#20102;&amp;#28857;&amp;quot;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#35201;&amp;#36825;&amp;#26679;&amp;#20570;&amp;quot;&amp;#30340;&amp;#35299;&amp;#37322;&lt;br&gt;&lt;br&gt;&amp;#30475;URL&amp;#37324;&amp;#20889;&amp;#30340;Makefile&amp;#37324;&amp;#30340;&amp;#36825;&amp;#21477;&amp;#35805;:&lt;br&gt;&lt;font style="background-color:#d0e0e3"&gt;make -C /lib/modules/$(KVERSION)/build M=$(PWD) modules&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#21442;&amp;#25968;M&amp;#26159;&amp;#20160;&amp;#20040;? &amp;#21442;&amp;#25968;modules&amp;#21448;&amp;#26159;&amp;#20160;&amp;#20040;? gcc&amp;#24590;&amp;#20040;&amp;#27809;&amp;#26377;&amp;#35843;&amp;#29992;? &amp;#20026;&amp;#20160;&amp;#20040;&amp;#21487;&amp;#20197;&amp;#31616;&amp;#21333;&amp;#30340;&amp;#19968;&amp;#34892;&amp;#21629;&amp;#20196;&amp;#21487;&amp;#20197;&amp;#23436;&amp;#25104;&amp;#32534;&amp;#35793;?&lt;br&gt;&lt;br&gt;&amp;#24102;&amp;#30528;&amp;#38382;&amp;#39064;&amp;#21435;&amp;#25214;&amp;#31572;&amp;#26696;:&lt;br&gt;&lt;font style="background-color:#d0e0e3"&gt;$ ls -ld /lib/modules/$(uname -r)/build&lt;/font&gt;&lt;br style="background-color:#d0e0e3"&gt;&lt;font style="background-color:#d0e0e3"&gt;lrwxrwxrwx 1 root root 40 2010-03-31 09:43 /lib/modules/2.6.31-21-generic/build -&amp;gt; /usr/src/linux-headers-2.6.31-21-generic&lt;/font&gt;&lt;br&gt;&lt;br&gt;ubuntu&amp;#19979;&amp;#30340;&lt;font style="background-color:#d0e0e3"&gt;/usr/src/linux-headers-2.6.31-21-generic&lt;/font&gt;&amp;#30446;&amp;#24405;&amp;#19979;&amp;#30340;Makefile&amp;#20854;&amp;#23454;&amp;#23601;&amp;#26159;kernel&amp;#20195;&amp;#30721;&amp;#19979;&amp;#30340;Makefile&amp;#25991;&amp;#20214;&amp;#12290;&amp;#25152;&amp;#20197;&amp;#19978;&amp;#38754;&amp;#30340;make&amp;#21629;&amp;#20196;&amp;#20013;&amp;#30340;modules&amp;#21442;&amp;#25968;&amp;#19982;&amp;#22312;kernel&amp;#20195;&amp;#30721;&amp;#30446;&amp;#24405;&amp;#37324;&amp;#30340;modules&amp;#21442;&amp;#25968;&amp;#26159;&amp;#19968;&amp;#33268;&amp;#30340;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#21442;&amp;#25968;&amp;quot;-C&amp;quot;&amp;#34920;&amp;#31034;&amp;#36827;&amp;#20837;&amp;#27492;&amp;#30446;&amp;#24405;, &amp;#30446;&amp;#24405;&amp;#19979;&amp;#26377;&amp;#21478;&amp;#19968;&amp;#20010;Makefile&amp;#25991;&amp;#20214;(/lib/modules/2.6.31-21-generic/build/Makefile), &amp;#27492;Makefile&amp;#20869;&amp;#30340;&amp;#19968;&amp;#23567;&amp;#27573;&amp;#20195;&amp;#30721;:&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp; 62 # Use make M=dir to specify directory of external module to build&lt;br&gt;&amp;nbsp; 63 # Old syntax make ... SUBDIRS=$PWD is still supported&lt;br&gt;&amp;nbsp; 64 # Setting the environment variable KBUILD_EXTMOD take precedence&lt;br&gt;&amp;nbsp; 65 ifdef SUBDIRS&lt;br&gt;&amp;nbsp; 66&amp;nbsp;&amp;nbsp; KBUILD_EXTMOD ?= $(SUBDIRS)&lt;br&gt;&amp;nbsp; 67 endif&lt;br&gt;&amp;nbsp; 68 &lt;br&gt;&amp;nbsp; 69 ifeq (&amp;quot;$(origin M)&amp;quot;, &amp;quot;command line&amp;quot;)&lt;br&gt;&amp;nbsp; 70&amp;nbsp;&amp;nbsp; KBUILD_EXTMOD := $(M)&lt;br&gt;&amp;nbsp; 71 endif&lt;br&gt;&lt;br&gt;&lt;/font&gt;&amp;#36825;&amp;#24050;&amp;#32463;&amp;#21487;&amp;#20197;&amp;#35299;&amp;#20915;&amp;#30097;&amp;#38382;:&lt;br&gt;&amp;#33258;&amp;#24049;&amp;#20889;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#32534;&amp;#35793;Makefile&amp;#25991;&amp;#20214;&amp;#21482;&amp;#26159;&amp;#20026;/lib/modules/2.6.31-21-generic/build/Makefile &amp;#25552;&amp;#20379;&amp;#20004;&amp;#20010;&amp;#21442;&amp;#25968;: &lt;br&gt;&lt;ul&gt;&lt;li&gt;directory of external module&lt;/li&gt;&lt;li&gt;&amp;quot;modules&amp;quot;&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br&gt;&amp;#25214;&amp;#20010;&amp;#22797;&amp;#26434;&amp;#30340;&amp;#39537;&amp;#21160;&amp;#35797;&amp;#35797;&amp;#26159;&amp;#21542;&amp;#20026;&amp;#36825;&amp;#26679;, &amp;#20110;&amp;#26159;&amp;#20174;intel&amp;#23448;&amp;#32593;&amp;#19979;&amp;#36733;&amp;#20102;e1000e-1.2.20.tar.gz&amp;#20195;&amp;#30721;&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;234 ifeq ($(KOBJ),$(KSRC))&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;235&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(MAKE) -C $(KSRC) SUBDIRS=$(shell pwd) modules&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;236 else&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;237&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(MAKE) -C $(KSRC) O=$(KOBJ) SUBDIRS=$(shell pwd) modules&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;238 endif&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;239 endif&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;.......(&amp;#36824;&amp;#26377;&amp;#24456;&amp;#22810;&amp;#19981;&amp;#26174;&amp;#31034;).......&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;274 default:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;275&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $(MAKE)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#19979;&amp;#38754;&amp;#26159;&amp;#32534;&amp;#35793;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#36807;&amp;#31243;:&lt;br&gt;&lt;font style="background-color:#cfe2f3"&gt;jessinio@jessinio-laptop:/tmp/e1000e-1.2.20/src$ &lt;b&gt;make &lt;/b&gt;&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;make -C /lib/modules/2.6.31-21-generic/build SUBDIRS=/tmp/e1000e-1.2.20/src modules&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;make[1]: Entering directory `/usr/src/linux-headers-2.6.31-21-generic&amp;#39;&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/netdev.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/ethtool.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/param.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_82571.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_ich8lan.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_80003es2lan.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_mac.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_nvm.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_phy.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000_manage.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/kcompat.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; LD [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000e.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; Building modules, stage 2.&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; MODPOST 1 modules&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; CC&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /tmp/e1000e-1.2.20/src/e1000e.mod.o&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;&amp;nbsp; LD [M]&amp;nbsp; /tmp/e1000e-1.2.20/src/&lt;b&gt;e1000e.ko&lt;/b&gt;&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;make[1]: Leaving directory `/usr/src/linux-headers-2.6.31-21-generic&amp;#39;&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;jessinio@jessinio-laptop:/tmp/e1000e-1.2.20/src$ &lt;b&gt;lsmod|grep e1000e&lt;/b&gt;&lt;/font&gt;&lt;br style="background-color:#cfe2f3"&gt;&lt;font style="background-color:#cfe2f3"&gt;jessinio@jessinio-laptop:/tmp/e1000e-1.2.20/src$ &lt;b&gt;sudo insmod e1000e.ko&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#32534;&amp;#35793;&amp;#19982;&amp;#21152;&amp;#36733;&amp;#19968;&amp;#36335;&amp;#36890;!&lt;br&gt;&lt;br&gt;insmod&amp;#21644;rmmod&amp;#32452;&amp;#21512;&amp;#19982;modprobe&amp;#30340;&amp;#21306;&amp;#21035;&lt;br&gt;&lt;br&gt;&amp;#20854;&amp;#23454;&amp;#22823;&amp;#23478;&amp;#37117;&amp;#30693;&amp;#36947;: modprobe&amp;#35299;&amp;#20915;module&amp;#30340;&amp;#20381;&amp;#36182;&amp;#38382;&amp;#39064;. insmod&amp;#21644;rmode&amp;#19981;&amp;#20250;&amp;#22788;&amp;#29702;&amp;#36825;&amp;#31181;&amp;#20381;&amp;#36182;&amp;#38382;&amp;#39064;.&lt;br&gt;&lt;br&gt;&amp;#20381;&amp;#36182;&amp;#30340;&amp;#20381;&amp;#25454;&amp;#26159;: `&amp;#20195;&amp;#30721;&amp;#20013;&amp;#20351;&amp;#29992;&amp;#30340;module&amp;#21517;`&lt;br&gt;&lt;br&gt;CLI&amp;#19979;&amp;#21487;&amp;#20197;&amp;#36825;&amp;#26679;&amp;#26597;&amp;#30475;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;$ modinfo iptable_filter|grep depends&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;depends:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ip_tables&lt;/font&gt;&lt;br&gt;&amp;#34987;&amp;#20381;&amp;#36182;&amp;#30340;ip_tables&amp;#21487;&amp;#33021;&amp;#21448;&amp;#20381;&amp;#36182;&amp;#20110;&amp;#20854;&amp;#23427;module, &amp;#19981;&amp;#26029;&amp;#30340;&amp;#21521;&amp;#19979;&amp;#26597;&amp;#25214;. &amp;#30452;&amp;#21040;depends&amp;#20026;NULL.&lt;br&gt;&lt;br&gt;depmod&amp;#20026;&amp;#22788;&amp;#29702;&amp;#36825;&amp;#31181;&amp;#38382;&amp;#39064;&amp;#30340;&amp;#24037;&amp;#20855;:modprobe expects an up-to-date modules.dep file, as generated by depmod&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;modprobe&amp;#21644;depmod&amp;#24037;&amp;#20855;&amp;#30340;&amp;#20851;&amp;#31995;.&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;modprobe&amp;#26597;&amp;#30475;&amp;#20381;&amp;#36182;&amp;#26641;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;$ modprobe --show-depends iptable_filter&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;insmod /lib/modules/2.6.31-21-generic/kernel/net/netfilter/x_tables.ko &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;insmod /lib/modules/2.6.31-21-generic/kernel/net/ipv4/netfilter/ip_tables.ko &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;insmod /lib/modules/2.6.31-21-generic/kernel/net/ipv4/netfilter/iptable_filter.ko &lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;b style="color:#ff0000"&gt;&amp;#19978;&amp;#38754;&amp;#20986;&amp;#29616;&amp;#30340;insmod&amp;#26159;&amp;#26377;&amp;#20808;&amp;#21518;&amp;#39034;&amp;#24207;&amp;#30340;.&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;#22240;&amp;#20026;modprobe&amp;#26159;&amp;#20351;&amp;#29992;&amp;#20102;modules.dep&amp;#25991;&amp;#20214;, &amp;#25152;&amp;#20197;&amp;#38754;&amp;#23545;&amp;#27809;&amp;#26377;&amp;#25918;&amp;#22312;&lt;font style="background-color:#b6d7a8"&gt;/lib/modules&lt;/font&gt;&amp;#19979;&amp;#25110;&amp;#32773;&amp;#27809;&amp;#26377;&amp;#35843;&amp;#29992;depmod&amp;#21629;&amp;#20196;&amp;#21435;&amp;#26356;&amp;#26032;modules.dep&amp;#25991;&amp;#20214;, modprobe&amp;#26159;&amp;#26080;&amp;#27861;&amp;#21152;&amp;#36733;&amp;#27169;&amp;#22359;&amp;#30340;:&lt;br&gt;&lt;font style="background-color:#d9ead3"&gt;# modprobe hello&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;FATAL: Module hello not found.&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;# insmod hello.ko &lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;# rmmod hello&lt;/font&gt;&lt;br&gt;&lt;br&gt;modprobe&amp;#38500;&amp;#20102;&amp;#21487;&amp;#20197;&amp;#26041;&amp;#20415;insert&amp;#21644;remove&amp;#27169;&amp;#22359;&amp;#22806;, &amp;#36824;&amp;#26377;&amp;#36825;&amp;#26679;&amp;#19968;&amp;#20123;&amp;#26041;&amp;#20415;&amp;#30340;&amp;#21151;&amp;#33021;:&lt;br&gt;1. option&lt;br&gt;2. alias&lt;br&gt;&amp;#36825;&amp;#26159;&amp;#36890;&amp;#36807;modprobe&amp;#35835;&amp;#21462;/etc/modprobe.conf( /etc/modprobe.d) &amp;#25991;&amp;#20214;&amp;#23436;&amp;#25104;.&lt;br&gt;&lt;br&gt;alias&amp;#20027;&amp;#26159;&amp;#26159;&amp;#29992;&amp;#20110;&amp;#35843;&amp;#29992;modprobe&amp;#24037;&amp;#20855;&amp;#26102;&amp;#20351;&amp;#29992;&amp;#31649;&amp;#29702;&amp;#32773;&amp;#21916;&amp;#27426;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#21517;&amp;#20195;&amp;#26367;&amp;#23454;&amp;#29616;&amp;#30340;module&amp;#21517;(&amp;#32534;&amp;#35793;&amp;#21518;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#21517;)&lt;br&gt;&amp;nbsp;* alias&amp;#19981;&amp;#20250;&amp;#24433;&amp;#21709; lsmod &amp;#21629;&amp;#20196;&amp;#21015;&amp;#20986;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#21517;. lsmod&amp;#26159;&amp;#21015;&amp;#20986;&amp;#30495;&amp;#23454;&amp;#30340;&amp;#27169;&amp;#22359;&amp;#21517;&lt;br&gt;&lt;br&gt;module&amp;#26377;&amp;#21738;&amp;#20123;option&amp;#21602;?&lt;br&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;$ /sbin/modinfo bnx2|grep parm&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;parm:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; disable_msi:Disable Message Signaled Interrupt (MSI) (int)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;parm:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; enable_entropy:Allow bnx2 to populate the /dev/random entropy pool (int)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#21015;&amp;#20986;&amp;#25351;&amp;#23450;&amp;#30340;bnx2&amp;#32593;&amp;#21345;module&amp;#30340;&amp;#21442;&amp;#25968;.&lt;br&gt;&lt;h2&gt;kernel&amp;#32534;&amp;#35793;&lt;/h2&gt;&lt;font style="background-color:#d0e0e3"&gt;jessinio@jessinio-laptop:~/linux-2.6.36.2$ make help|grep oldconfig&lt;/font&gt;&lt;br style="background-color:#d0e0e3"&gt;&lt;font style="background-color:#d0e0e3"&gt;&amp;nbsp; oldconfig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Update current config utilising a provided .config as base&lt;/font&gt;&lt;br style="background-color:#d0e0e3"&gt;&lt;font style="background-color:#d0e0e3"&gt;&amp;nbsp; silentoldconfig - Same as oldconfig, but quietly, additionally update deps&lt;/font&gt;&lt;br style="background-color:#d0e0e3"&gt;&lt;font style="background-color:#d0e0e3"&gt;&amp;nbsp; oldnoconfig&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - Same as silentoldconfig but set new symbols to n (unset)&lt;/font&gt;&lt;br style="background-color:#d0e0e3"&gt;&lt;br&gt;&amp;#36825;&amp;#19977;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#37117;&amp;#26159;&amp;#21033;&amp;#29992;&amp;#26087;kernel&amp;#30340;configure&amp;#25991;&amp;#20214;. &amp;#20363;&amp;#22914;:&lt;br&gt;jessinio@jessinio-laptop:~/linux-2.6.36.2$ cp /boot/config-2.6.31-21-generic ./.config&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-9018432402023366271?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/9018432402023366271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2011/01/linux-kernel-and-modules.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9018432402023366271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9018432402023366271'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2011/01/linux-kernel-and-modules.html' title='linux kernel and modules'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4744419269045755467</id><published>2010-12-14T07:58:00.001-08:00</published><updated>2010-12-14T19:32:58.425-08:00</updated><title type='text'>ip route</title><content type='html'>&lt;b style="background-color:#f4cccc"&gt;&amp;#31508;&amp;#35760;&lt;/b&gt;&lt;br&gt;route&amp;#26159;&amp;#20160;&amp;#20040;&amp;#24847;&amp;#24605;?&lt;br&gt;&amp;#36825;&amp;#20010;&amp;#35789;&amp;#30340;&amp;#23383;&amp;#38754;&amp;#24847;&amp;#24605;&amp;#19968;&amp;#30452;&amp;#19981;&amp;#30693;&amp;#36947;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#24847;&amp;#24605;&amp;#12290; &amp;#20854;&amp;#23454;&amp;#36825;&amp;#19981;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#27721;&amp;#35821;&amp;#35789;&amp;#27719;&amp;#12290;&amp;#27721;&amp;#35821;&amp;#35789;&amp;#27719;&amp;#37324;&amp;#21482;&amp;#26377;&amp;#19968;&amp;#20010;&amp;ldquo;&lt;a href="http://www.zdic.net/cd/ci/13/ZdicE8ZdicB7ZdicAF244260.htm" id="f80g" title="&amp;#36335;&amp;#30001;&amp;#21333;"&gt;&amp;#36335;&amp;#30001;&amp;#21333;&lt;/a&gt;&amp;rdquo; &amp;#65292;&amp;#20026;&amp;#19968;&amp;#21517;&amp;#35789;&amp;#12290; &amp;#36335;&amp;#30001;(route)&amp;#26377;&amp;#20004;&amp;#31181;&amp;#24847;&amp;#24605;&amp;#65306;&lt;br&gt;1. &amp;#36873;&amp;#25321;&amp;#26576;&amp;#36335;&amp;#32447;&lt;br&gt;2. &amp;#19982;&amp;quot;&amp;#36335;&amp;#30001;&amp;#21333;&amp;quot;&amp;#30340;&amp;#24847;&amp;#24605;&amp;#19968;&amp;#33268;: &amp;#25351;&amp;#26053;&amp;#36884;&amp;#25152;&amp;#32463;&amp;#21382;&amp;#30340;&amp;#22320;&amp;#21517;&amp;#21333;&lt;br&gt;&lt;br&gt;&amp;#36873;&amp;#25321;&amp;#36335;&amp;#32447;&amp;#30340;&amp;#20381;&amp;#25454;&amp;#26159;&amp;quot;&amp;#30446;&amp;#30340;&amp;#22320;&amp;quot;. &lt;br&gt;&lt;div style="margin-left:40px"&gt;In the common case, route selection is based completely on the destination address. Conventional (as opposed to policy-based) IP networking relies on only the destination address to select a route for a packet.&lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#20294;&amp;#26159;&amp;#38543;&amp;#30528;&amp;#21457;&amp;#23637;, &amp;#20165;&amp;#20165;&amp;#26159;destination&amp;#26041;&amp;#24335;&amp;#30340;route&amp;#26041;&amp;#24335;&amp;#19981;&amp;#33021;&amp;#28385;&amp;#36275;&amp;#35201;&amp;#27714;:&lt;br&gt;&lt;div style="margin-left:40px"&gt;With the prevalence of low cost bandwidth, easily configured VPN tunnels, and increasing reliance on networks, the technique of selecting a route based solely on the destination IP address range no longer suffices for all situations. &lt;br&gt;&lt;/div&gt;&lt;div style="margin-left:40px"&gt;&lt;br&gt;&lt;/div&gt;linux&amp;#23545;&amp;#24212;&amp;#36825;&amp;#31181;&amp;#21457;&amp;#23637;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#33853;&amp;#23454;&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;&lt;font style="background-color:#d9ead3"&gt;Since kernel 2.2, linux has supported &lt;b&gt;policy based routing&lt;/b&gt; through the use of multiple routing tables and the &lt;b&gt;routing policy database (RPDB)&lt;/b&gt;. &lt;/font&gt;&lt;font style="background-color:#d9ead3"&gt;Together, they allow a network administrator to con&amp;#64257;gure a machine select different routing tables and routes based on a number of criteria.&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#24847;&amp;#24605;&amp;#22823;&amp;#27010;&amp;#26159;&amp;#22914;&amp;#19979;&amp;#20004;&amp;#20214;&amp;#20107;&amp;#29289;:&lt;br&gt;1. linux&amp;#25903;&amp;#25345;&amp;#22810;routing tables.&amp;nbsp; &lt;b&gt;&lt;font style="background-color:#d9ead3"&gt;routing policy database (RPDB)&lt;/font&gt;&lt;/b&gt;&lt;br&gt;2. &amp;#27599;&amp;#24352;&amp;#34920;&amp;#26377;&amp;#29420;&amp;#31435;&amp;#30340;&amp;#35268;&amp;#21017;. &lt;font style="background-color:#d9ead3"&gt;&lt;b&gt;policy based routing&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#24179;&amp;#26102;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#36335;&amp;#30001;&amp;#37117;&amp;#26159;&amp;#30001;destination&amp;#25104;&amp;#21807;&amp;#19968;&amp;#26465;&amp;#20214;(&amp;#27604;&amp;#22914;&amp;#20351;&amp;#29992;route&amp;#21629;&amp;#20196;&amp;#25171;&amp;#21360;&amp;#30340;&amp;#32080;&amp;#26524;). &amp;#37027;&amp;#20040;&lt;font style="background-color:#d9ead3"&gt;&lt;b&gt;policy based routing&lt;/b&gt;&lt;/font&gt;&amp;#26377;&amp;#20160;&amp;#20040;&amp;#37325;&amp;#35201;&amp;#21602;?&lt;br&gt;&lt;div style="margin-left:40px"&gt;In fact, advanced routing could more accurately be called policy-based networking.&lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#19968;&amp;#27573;&amp;#35805;, &amp;#25551;&amp;#36848;&amp;#20102;linux&amp;#22312;&amp;#36335;&amp;#30001;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#26102;, &lt;font style="background-color:#d9ead3"&gt;&lt;b&gt;policy based routing&lt;/b&gt;&lt;/font&gt;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#22810;&amp;#31181;&amp;#23454;&amp;#29616;&amp;#26041;&amp;#27861;&lt;br&gt;&lt;div style="background-color:#cfe2f3;margin-left:40px"&gt;Selectors available for use in &lt;b&gt;policy-based routing&lt;/b&gt; are attributes of a packet passing through the linux routing code. The source address of a packet, the ToS &amp;#64258;ags, an fwmark (a mark carried through the kernel in the data structure representing the packet), and the interface name on which the packet was received are attributes which can be used as selectors. By selecting a routing table based on packet attributes, an administrator can have granular control over the network path of any packet.&lt;br&gt;&lt;/div&gt;selector&amp;#30830;&amp;#23450;&amp;#20351;&amp;#29992;&amp;#37027;&amp;#24352;routing table. &lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;&amp;#20154;&amp;#31867;&amp;#25991;&amp;#23383;&amp;#25551;&amp;#36848;Linux&amp;#36873;&amp;#25321;&amp;#32447;&amp;#36335;&amp;#19981;&amp;#26159;&amp;#24456;&amp;#23481;&amp;#26131;&amp;#29702;&amp;#35299;, &amp;#22914;&amp;#19979;&amp;#19968;&amp;#27573;&amp;#20266;&amp;#20195;&amp;#30721;&amp;#27604;&amp;#36739;&amp;#22909;&amp;#65306;&lt;br style="background-color:#d9d2e9"&gt;&lt;font style="background-color:#d9ead3"&gt;if packet.routeCacheLookupKey in routeCache :&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;route = routeCache[ packet.routeCacheLookupKey ]&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;else&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for rule in rpdb :&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if packet.rpdbLookupKey in rule :&lt;/font&gt; &lt;font style="background-color:#d9d2e9"&gt;(rule&amp;#20026;&amp;#19979;&amp;#34920;&amp;#30340;RPDB&amp;#23545;&amp;#35937;)&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;routeTable = rule[ lookupTable ]&lt;/font&gt; &lt;font style="background-color:#d9d2e9"&gt;(routeTable&amp;#20026;&amp;#19979;&amp;#34920;&amp;#30340;route table&amp;#23545;&amp;#35937;)&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if packet.routeLookupKey in routeTable :&lt;/font&gt;&lt;br style="background-color:#d9ead3"&gt;&lt;font style="background-color:#d9ead3"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;route = route_table[ packet.routeLookup_key ]&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#25226;rpdb&amp;#20026;routing table, &amp;#35268;&amp;#21017;(rule)&amp;#37117;&amp;#22312;DB&amp;#20013;&amp;#65292; &amp;#27599;&amp;#26465;rule&amp;#26377;&amp;#19981;&amp;#21516;&amp;#30340;&amp;#23646;&amp;#24615;(&amp;#36825;&amp;#37324;&amp;#30340;&amp;#23646;&amp;#24615;&amp;#21253;&amp;#25324;&amp;#19978;&amp;#38754;&amp;#25552;&amp;#21040;&amp;#30340;attributes).&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ead1dc"&gt;&amp;#20266;&amp;#20195;&amp;#30721;&amp;#20013;&amp;#30340;LookupKey&amp;#26159;&amp;#20195;&amp;#34920;&amp;#19979;&amp;#34920;&amp;#20013;&amp;#20855;&amp;#20307;&amp;#30340;&amp;#19968;&amp;#26465;&amp;#23646;&amp;#24615;&lt;/b&gt;. &amp;#25152;&amp;#20197;, &amp;#20854;&amp;#23454;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20266;&amp;#20195;&amp;#30721;&amp;#26159;&amp;#24456;N&amp;#22810;if&amp;#35821;&amp;#21477;&amp;#30340;.&lt;br&gt;&lt;br&gt;&lt;div id="me26" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_537f5677mhp_b" style="height:192.714px;width:648px"&gt;&lt;/div&gt;* &amp;#26012;&amp;#20307;&amp;#23383;&amp;#30340;&amp;#23646;&amp;#24615;&amp;#26159;&amp;#21487;&amp;#36873;&amp;#30340;. &amp;#22914;&amp;#26524;&amp;#23384;&amp;#22312;&amp;#23601;&amp;#21028;&amp;#26029;, &amp;#19981;&amp;#23384;&amp;#22312;&amp;#19981;&amp;#21028;&amp;#26029;.&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;, route table&amp;#36215;&amp;#21040;:&lt;br&gt;1. &amp;#32452;&amp;#32455;rule&amp;#30340;&amp;#20316;&amp;#29992;&lt;br&gt;2. &amp;#21516;&amp;#31867;&amp;#30340;rule&amp;#20250;&amp;#25317;&amp;#26377;&amp;#19968;&amp;#32452;&amp;#23646;&amp;#24615;.&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#34920;&amp;#20013;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;, &amp;#27599;&amp;#20010;packet&amp;#30340;destination&amp;#21644;source&amp;#26159;&amp;#24517;&amp;#23450;&amp;#34987;&amp;#29992;&amp;#20110;&amp;#36335;&amp;#30001;, &amp;#20294;&amp;#26159;&amp;#19981;&amp;#21807;&amp;#19968;&amp;#30830;&amp;#23450;&amp;#26465;&amp;#20214;.&lt;br&gt;&lt;br&gt;linux system administrator&amp;#26597;&amp;#30475;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#19977;&amp;#31181;&amp;#25968;&amp;#25454;&amp;#30340;&amp;#26041;&amp;#27861;:&lt;br&gt;1. route cache &amp;#34920;:&amp;nbsp; ip route show cache&lt;br&gt;2. &amp;#27599;&amp;#24352;RPDB&amp;#34920;: ip rule list table &amp;#34920;&amp;#21517;&lt;br&gt;3. &amp;#21015;&amp;#20986;&amp;#20840;&amp;#37096;route table:&amp;nbsp; ip rule show&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4744419269045755467?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4744419269045755467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/12/ip-route.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4744419269045755467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4744419269045755467'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/12/ip-route.html' title='ip route'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5651879027455829409</id><published>2010-12-12T20:01:00.001-08:00</published><updated>2010-12-12T20:01:20.593-08:00</updated><title type='text'>ethernet</title><content type='html'>&lt;h2&gt;&amp;#24320;&amp;#22987;&lt;/h2&gt;&amp;#20197;&amp;#22826;&amp;#32593;&amp;#23618;&amp;#26412;&amp;#26102;&amp;#24456;&amp;#23569;&amp;#20851;&amp;#27880;. &amp;#26368;&amp;#36817;&amp;#19968;&amp;#27425;&amp;#20851;&amp;#27880;&amp;#26159;&amp;#29702;&amp;#35299;LVS&amp;#26102;. &amp;#26368;&amp;#36817;&amp;#22312;&amp;#30475;&amp;lt;&amp;lt;Guide to IP Layer Network&lt;br&gt;Administration with Linux&amp;gt;&amp;gt;, &amp;#20570;&amp;#20570;&amp;#31508;&amp;#35760;, &amp;#38543;&amp;#20415;&amp;#21160;&amp;#21160;&amp;#25163;. &amp;#21152;&amp;#28145;&amp;#35760;&amp;#24518;.&lt;br&gt;&lt;br&gt;&amp;#34987;&amp;#25805;&amp;#20316;&amp;#30340;&amp;#26426;&amp;#22120;&amp;#19978;&amp;#21482;&amp;#26377;&amp;#32593;&amp;#20851;&amp;#30340;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;:&lt;br&gt;$ arp -n&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWtype&amp;nbsp; HWaddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flags Mask&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Iface&lt;br&gt;10.20.129.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ether&amp;nbsp;&amp;nbsp; 00:0F:E2:D3:BE:B8&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eth0&lt;br&gt;&lt;br&gt;&amp;#36827;&amp;#34892;&amp;#22914;&amp;#19979;&amp;#21160;&amp;#20316;:&lt;br&gt;$ ping 10.20.129.32&lt;br&gt;&lt;br&gt;&amp;#25226;ping&amp;#21160;&amp;#20316;&amp;#21457;&amp;#20986;&amp;#30340;&amp;#21253;&amp;#25235;&amp;#19979;&amp;#26469;&lt;br&gt;&lt;br&gt;$ sudo tcpdump -ent -i eth0 arp or icmp&lt;br&gt;&lt;br&gt;....(&amp;#25130;&amp;#25481;).....&lt;br&gt;&lt;b style="background-color:#ea9999"&gt;00:23:ae:93:d9:26 &amp;gt; Broadcast&lt;/b&gt;, ethertype ARP (0x0806), length 42: arp who-has 10.20.129.32 tell 10.20.129.19&lt;br&gt;&lt;b style="background-color:#ea9999"&gt;00:1e:4f:ad:41:58 &amp;gt; 00:23:ae:93:d9:26&lt;/b&gt;, ethertype ARP (0x0806), length 60: arp reply 10.20.129.32 is-at 00:1e:4f:ad:41:58&lt;br&gt;&lt;b style="background-color:#93c47d"&gt;00:23:ae:93:d9:26 &amp;gt; 00:1e:4f:ad:41:58&lt;/b&gt;, ethertype IPv4 (0x0800), length 98: 10.20.129.19 &amp;gt; 10.20.129.32: ICMP echo request, id 26119, seq 1, length 64&lt;br&gt;&lt;b style="background-color:#93c47d"&gt;00:1e:4f:ad:41:58 &amp;gt; 00:23:ae:93:d9:26&lt;/b&gt;, ethertype IPv4 (0x0800), length 98: 10.20.129.32 &amp;gt; 10.20.129.19: ICMP echo reply, id 26119, seq 1, length 64&lt;br&gt;....(&amp;#25130;&amp;#25481;).....&lt;br&gt;&lt;br&gt;ICMP&amp;#21253;&amp;#22312;ethernet&amp;#23618;&amp;#20043;&amp;#19978;, &amp;#38656;&amp;#35201;&amp;#20351;&amp;#29992;ethernet&amp;#21457;&amp;#25968;&amp;#25454;, &amp;#38656;&amp;#35201;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;. &amp;#20026;&amp;#20102;&amp;#24471;&amp;#21040;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;&amp;#20351;&amp;#29992;&amp;#21040;ARP&amp;#21327;&amp;#35758;. &lt;br&gt;&lt;br&gt;ARP&amp;#36807;&amp;#31243;&amp;#19982;&amp;#22914;&amp;#19979;&amp;#21629;&amp;#20196;&amp;#19968;&amp;#33268;:&amp;nbsp; &lt;b style="background-color:#b6d7a8"&gt;$ sudo arping -I eth0 10.20.129.32&lt;/b&gt;&amp;#36825;&amp;#19968;&amp;#26465;&amp;#21629;&amp;#20196;&amp;#34920;&amp;#31034;&amp;#21521;&amp;#32593;&amp;#27573;&amp;#20869;&amp;#26597;&amp;#35810;&amp;#26576;IP&amp;#23545;&amp;#24212;&amp;#30340;MAC&amp;#22320;&amp;#22336;.&lt;br&gt;&amp;#26597;&amp;#30475;ARP&amp;#34920;:&lt;br&gt;$ arp -n&lt;br&gt;Address&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; HWtype&amp;nbsp; HWaddress&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flags Mask&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Iface&lt;br&gt;10.20.129.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ether&amp;nbsp;&amp;nbsp; 00:0F:E2:D3:BE:B8&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eth0&lt;br&gt;&lt;b style="color:#e06666"&gt;10.20.129.32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ether&amp;nbsp;&amp;nbsp; 00:1E:4F:AD:41:58&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; eth0&lt;/b&gt;&lt;b&gt;&lt;br&gt;&amp;#22686;&amp;#21152;&amp;#20102;&amp;#19968;&amp;#20010;&amp;#35760;&amp;#24405;&lt;/b&gt;&lt;br&gt;&lt;h3&gt;arping&amp;#21629;&amp;#20196; -A &amp;#21442;&amp;#25968;: &lt;font class="mr15" id="wdeg"&gt;ARP announcement, &amp;#20063;&amp;#31216;&amp;#20026;gratuitous ARP&lt;/font&gt;&lt;/h3&gt;$ sudo arping -A -c 3 -I eth0 10.20.129.19&lt;br&gt;tcpdump&amp;#30340;&amp;#25235;&amp;#21253;&amp;#32467;&amp;#26524;:&lt;br&gt;&lt;b&gt;00:23:ae:93:d9:26 &amp;gt; Broadcas&lt;/b&gt;t, ethertype ARP (0x0806), length 42: arp reply 10.20.129.19 is-at 00:23:ae:93:d9:26&lt;br&gt;&lt;b&gt;00:23:ae:93:d9:26 &amp;gt; Broadcast&lt;/b&gt;, ethertype ARP (0x0806), length 42: arp reply 10.20.129.19 is-at 00:23:ae:93:d9:26&lt;br&gt;&lt;b&gt;00:23:ae:93:d9:26 &amp;gt; Broadcast&lt;/b&gt;, ethertype ARP (0x0806), length 42: arp reply 10.20.129.19 is-at 00:23:ae:93:d9:26&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#30475;&amp;#20986;, -A&amp;#26159;&amp;#21521;&amp;#25972;&amp;#20010;&amp;#32593;&amp;#27573;&amp;#36890;&amp;#30693;&amp;#33258;&amp;#24049;&amp;#30340;IP. &amp;#40664;&amp;#35748;&amp;#24773;&amp;#20917;&amp;#19979;, linux &amp;#19981;&amp;#20250;&amp;#25509;&amp;#21463;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#21253;.&lt;br&gt;&amp;#30001;arp_accept&amp;#36873;&amp;#39033;&amp;#25511;&amp;#21046;, &amp;#22914;&amp;#19979;&amp;#25991;&amp;#26723;:&lt;br&gt;&lt;br&gt;arp_accept - BOOLEAN&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Define behavior for gratuitous ARP frames who&amp;#39;s IP is not&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; already present in the ARP table:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 - don&amp;#39;t create new entries in the ARP table&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 - create new entries in the ARP table&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#30475;&amp;#30693;&amp;#36947; gratuitous ARP &amp;#21253;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#29992;&amp;#27861;&amp;#65292; &amp;#21487;&amp;#20197;&amp;#31227;&amp;#27493;&amp;#21040;&amp;#65306; http://wiki.wireshark.org/Gratuitous_ARP&lt;br&gt;&lt;br&gt;&lt;h3&gt;arping&amp;#21629;&amp;#20196; -D &amp;#21442;&amp;#25968;: Duplicate address detection mode (DAD)&lt;/h3&gt;&amp;#36825;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#30456;&amp;#24403;&amp;#26377;&amp;#29992;: &amp;#29992;&amp;#20110;&amp;#25490;&amp;#38500;&amp;#32593;&amp;#27573;&amp;#20013;&amp;#26377;IP&amp;#20914;&amp;#31361;. &amp;#26469;&amp;#20010;&amp;#23454;&amp;#20363;:&lt;br&gt;&lt;br&gt;root@jessinio-laptop:~# ifconfig wlan0 |head -n 2&lt;br&gt;wlan0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Link encap:Ethernet&amp;nbsp; HWaddr &lt;b style="color:#ff0000"&gt;00:16:cf:68:5b:a7 &amp;nbsp;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; inet addr:&lt;b style="color:#0000ff"&gt;192.168.0.106&lt;/b&gt;&amp;nbsp; Bcast:192.168.0.255&amp;nbsp; Mask:255.255.255.0&lt;br&gt;&lt;br&gt;root@jessinio-laptop:~# arping -D -I wlan0 &lt;b style="color:#0000ff"&gt;192.168.0.106&lt;/b&gt;&lt;br&gt;ARPING 192.168.0.106 from 0.0.0.0 wlan0&lt;br&gt;Unicast reply from 192.168.0.106 [&lt;b style="color:#ff0000"&gt;00:18:41:FE:26:5F&lt;/b&gt;]&amp;nbsp; 90.390ms&lt;br&gt;Sent 1 probes (1 broadcast(s))&lt;br&gt;Received 1 response(s)&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;, &lt;b style="color:#0000ff"&gt;192.168.0.106&lt;/b&gt; &amp;#34987;&amp;#20004;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#20351;&amp;#29992;, &amp;#19968;&amp;#21488;&amp;#26159;&amp;#26412;&amp;#24535;&amp;#30340;&lt;b style="color:#ff0000"&gt;00:16:cf:68:5b:a7&lt;font color="#000000"&gt; , &lt;/font&gt;&lt;/b&gt;&lt;font color="#000000"&gt;&amp;#21478;&amp;#19968;&amp;#21488;&amp;#26159;&lt;b style="color:#ff0000"&gt;00:18:41:FE:26:5F&lt;/b&gt;.&lt;br&gt;&lt;br&gt;&amp;#25235;&amp;#21253;&amp;#20449;&amp;#24687;:&lt;/font&gt;&lt;br&gt;00:16:cf:68:5b:a7 &amp;gt; ff:ff:ff:ff:ff:ff, ethertype ARP (0x0806), length 42: Request who-has 192.168.0.106 (ff:ff:ff:ff:ff:ff) tell &lt;b style="background-color:#93c47d"&gt;0.0.0.0&lt;/b&gt;, length 28&lt;br&gt;00:18:41:fe:26:5f &amp;gt; 00:16:cf:68:5b:a7, ethertype ARP (0x0806), length 42: Reply 192.168.0.106 is-at 00:18:41:fe:26:5f, length 28&lt;br&gt;&lt;br&gt;&lt;h2&gt;&amp;#32467;&amp;#26463;&lt;/h2&gt;&lt;p&gt;&amp;#20197;&amp;#19968;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#20026;&amp;#32467;&amp;#26463;: &amp;#20351;&amp;#29992;ICMP&amp;#21327;&amp;#35758;&amp;#33021;&amp;#21542;&amp;#24471;&amp;#30693;&amp;#32593;&amp;#27573;&amp;#20013;&amp;#26377;&amp;#20854;&amp;#23427;&amp;#26426;&amp;#22120;&amp;#20351;&amp;#29992;&amp;#33258;&amp;#24049;&amp;#30340;IP&amp;#21602;? &amp;#27604;&amp;#22914;, ping&amp;#33258;&amp;#24049;&amp;#30340;IP.&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;&lt;p&gt;&amp;#31572;&amp;#26696;&amp;#26159;&amp;#19981;&amp;#21487;&amp;#20197;&amp;#30340;. &amp;#22240;&amp;#20026;ICMP&amp;#21253;&amp;#22522;&amp;#26412;&amp;#27809;&amp;#26377;&amp;#21457;&amp;#20986;&amp;#26469;. &amp;#22238;&amp;#27969;&amp;#20102;. &amp;#20363;&amp;#22914;:&lt;/p&gt;&lt;p&gt;&lt;br&gt;&lt;/p&gt;$ ping 10.20.129.19&lt;br&gt;&amp;#20135;&amp;#29983;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#19981;&amp;#20250;&amp;#27969;&amp;#36807;ethernet&amp;#21345;, &amp;#20174;route&amp;#34920;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;:&lt;br&gt;&lt;br&gt;$ ip route list table local&lt;br&gt;broadcast 127.255.255.255 dev lo&amp;nbsp; proto kernel&amp;nbsp; scope link&amp;nbsp; src 127.0.0.1&lt;br&gt;broadcast 10.20.129.0 dev eth0&amp;nbsp; proto kernel&amp;nbsp; scope link&amp;nbsp; src 10.20.129.19&lt;br&gt;&lt;b style="background-color:#9fc5e8"&gt;local 10.20.129.19 dev eth0&amp;nbsp; proto kernel&amp;nbsp; scope host&amp;nbsp; src 10.20.129.19&lt;/b&gt;&lt;br&gt;broadcast 10.20.129.127 dev eth0&amp;nbsp; proto kernel&amp;nbsp; scope link&amp;nbsp; src 10.20.129.19&lt;br&gt;broadcast 127.0.0.0 dev lo&amp;nbsp; proto kernel&amp;nbsp; scope link&amp;nbsp; src 127.0.0.1&lt;br&gt;local 127.0.0.1 dev lo&amp;nbsp; proto kernel&amp;nbsp; scope host&amp;nbsp; src 127.0.0.1&lt;br&gt;local 127.0.0.0/8 dev lo&amp;nbsp; proto kernel&amp;nbsp; scope host&amp;nbsp; src 127.0.0.1&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5651879027455829409?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5651879027455829409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/12/ethernet.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5651879027455829409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5651879027455829409'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/12/ethernet.html' title='ethernet'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7846083230056165816</id><published>2010-11-26T23:29:00.001-08:00</published><updated>2010-11-26T23:31:47.426-08:00</updated><title type='text'>iptables与流量统计</title><content type='html'>&amp;#35201;&amp;#23545;&amp;#26426;&amp;#25151;&amp;#26576;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#36827;&amp;#34892;&amp;#20020;&amp;#26102;&amp;#24615;&amp;#30340; &amp;#20869;&amp;#12289;&amp;#22806;&amp;#32593;&amp;#27969;&amp;#37327;&amp;#32479;&amp;#35745;&amp;#20998;&amp;#24320;&amp;#12290;&amp;#36825;&amp;#31181;&amp;#20107;&amp;#26368;&amp;#22909;&amp;#19981;&amp;#35201;&amp;#25918;&amp;#21040;&amp;#24212;&amp;#29992;&amp;#23618;&amp;#32479;&amp;#35745;&amp;#65292;&amp;#22240;&amp;#20026;&amp;#25928;&amp;#29575;&amp;#24456;&amp;#25104;&amp;#38382;&amp;#39064;&amp;#12290;&amp;#31532;&amp;#19968;&amp;#26102;&amp;#38388;&amp;#24819;&amp;#21040;&amp;#22788;&amp;#20110;&amp;#32593;&amp;#32476;&amp;#20108;&amp;#12289;&amp;#19977;&amp;#23618;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#65292;&amp;#25928;&amp;#29575;&amp;#19981;&amp;#20250;&amp;#34987;&amp;#36807;&amp;#22810;&amp;#24433;&amp;#21709;&amp;#12290; &amp;#22914;ntop&amp;#20043;&amp;#31867;&amp;#20351;&amp;#29992;libpcap&amp;#24211;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#12290;&lt;br&gt;&amp;#20854;&amp;#23454;iptables&amp;#20063;&amp;#26159;&amp;#26377;&amp;#21253;&amp;#32479;&amp;#35745;&amp;#12290;&amp;#22240;&amp;#20026;&amp;#27599;&amp;#20010;&amp;#21253;&amp;#37117;&amp;#32463;&amp;#36807;&amp;#23427;&amp;#12290;&amp;#32780;&amp;#19988;&amp;#19981;&amp;#29992;&amp;#23433;&amp;#35013;&amp;#20219;&amp;#20309;&amp;#24037;&amp;#20855;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#21152;&amp;#20837;&amp;#20004;&amp;#26465;&amp;#35268;&amp;#21017;&amp;#65306;&lt;br&gt;jessinio@jessinio-laptop:~$ sudo iptables -t filter&amp;nbsp; -A INPUT -p all -s 174.121.79.132 -j ACCEPT&lt;br&gt;jessinio@jessinio-laptop:~$ sudo iptables -t filter&amp;nbsp; -A OUTPUT -p all -d 174.121.79.132 -j ACCEPT&lt;br&gt;&lt;br&gt;&amp;#24773;&amp;#20917;&amp;#65306;&lt;br&gt;jessinio@jessinio-laptop:~$ sudo iptables -L&lt;br&gt;Chain INPUT (policy ACCEPT)&lt;br&gt;target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;ACCEPT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all&amp;nbsp; --&amp;nbsp; web124.webfaction.com&amp;nbsp; anywhere&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br&gt;Chain FORWARD (policy ACCEPT)&lt;br&gt;target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br&gt;Chain OUTPUT (policy ACCEPT)&lt;br&gt;target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;ACCEPT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all&amp;nbsp; --&amp;nbsp; anywhere&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; web124.webfaction.com &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#32080;&amp;#26524;&amp;#65306;&lt;br&gt;jessinio@jessinio-laptop:~$ sudo iptables -L -n -v&lt;br&gt;Chain INPUT (policy ACCEPT 11M packets, 5033M bytes)&lt;br&gt;&amp;nbsp;pkts bytes target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;b style="color:#0000ff"&gt;10&lt;/b&gt;&amp;nbsp; &lt;b style="color:#ff0000"&gt;2088&lt;/b&gt; ACCEPT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all&amp;nbsp; --&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 174.121.79.132&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0/0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br&gt;Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)&lt;br&gt;&amp;nbsp;pkts bytes target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&lt;br&gt;Chain OUTPUT (policy ACCEPT 14M packets, 14G bytes)&lt;br&gt;&amp;nbsp;pkts bytes target&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; prot opt in&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; out&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; source&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;b style="color:#0000ff"&gt;48&lt;/b&gt; &lt;b style="color:#ff0000"&gt;25152&lt;/b&gt; ACCEPT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; all&amp;nbsp; --&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0/0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 174.121.79.132&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7846083230056165816?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7846083230056165816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/11/iptables.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7846083230056165816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7846083230056165816'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/11/iptables.html' title='iptables与流量统计'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3716332712483078149</id><published>2010-11-18T22:00:00.001-08:00</published><updated>2010-11-18T22:01:59.929-08:00</updated><title type='text'>seteuid</title><content type='html'># ps axjf|grep -v grep|grep ftp&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 13871 13871 13871 ?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1 Ss&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color:#ff0000"&gt;0&lt;/b&gt;&amp;nbsp;&amp;nbsp; 0:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf&lt;br&gt;13871 14146 14146 14146 ?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1 Ss&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color:#ff0000"&gt;99&lt;/b&gt;&amp;nbsp;&amp;nbsp; 0:00&amp;nbsp; \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf&lt;br&gt;14146 14148 14146 14146 ?&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -1 S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color:#ff0000"&gt;509&lt;/b&gt;&amp;nbsp;&amp;nbsp; 0:00&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \_ /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf&lt;br&gt;&lt;br&gt;&lt;br&gt;id&amp;#26159;99&amp;#36827;&amp;#31243;&amp;#21487;&amp;#20197;&amp;#20135;&amp;#29983;id&amp;#20026;509&amp;#30340;&amp;#36827;&amp;#31243;&amp;#65292; &amp;#21407;&amp;#26469;fork&amp;#21518;&amp;#65292; &amp;#23376;&amp;#36827;&amp;#31243;&amp;#36824;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#35843;&amp;#29992;seteuid&amp;#20999;&amp;#21040;&amp;#20854;&amp;#23427;uid&amp;#30340;&amp;#65292; &amp;#36825;&amp;#20043;&amp;#21069;&amp;#36824;&amp;#19981;&amp;#30693;&amp;#36947;&amp;#12290; &amp;#22914;&amp;#19979;&amp;#27979;&amp;#35797;&amp;#20195;&amp;#30721;&amp;#65306;&lt;br&gt;&lt;br&gt;#!/usr/bin/python&lt;br&gt;#coding:utf-8&lt;br&gt;&lt;br&gt;import os&lt;br&gt;import time&lt;br&gt;&lt;br&gt;# &amp;#21516;&amp;#19968;&amp;#36827;&amp;#31243;&amp;#21487;&amp;#20197;&amp;#20174;0&amp;#36716;&amp;#25104;&amp;#20854;&amp;#23427;&amp;#30340;&lt;br&gt;os.seteuid(99)&lt;br&gt;os.seteuid(0)&lt;br&gt;&lt;br&gt;os.seteuid(99)&lt;br&gt;pid = os.fork()&lt;br&gt;# child&lt;br&gt;if pid == 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; # &amp;#23376;&amp;#36827;&amp;#31243;&amp;#36824;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;seteuid&amp;#22238;&amp;#21040;0&amp;#30340;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.seteuid(0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; time.sleep(10)&lt;br&gt;else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print pid &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; time.sleep(10)&lt;br&gt;&lt;br&gt;&amp;#36816;&amp;#34892;&amp;#32467;&amp;#26524;&amp;#65306;&lt;br&gt;&lt;br&gt;[jessinio@niowork tmp]$ ps axuf|grep root.py&lt;br&gt;&lt;b style="color:#ff0000"&gt;nobody&lt;/b&gt;&amp;nbsp;&amp;nbsp; 28559&amp;nbsp; 0.0&amp;nbsp; 0.0&amp;nbsp; 74192&amp;nbsp; 2912 pts/11&amp;nbsp;&amp;nbsp; T&amp;nbsp;&amp;nbsp;&amp;nbsp; 13:56&amp;nbsp;&amp;nbsp; 0:00&amp;nbsp; |&amp;nbsp;&amp;nbsp; \_ python root.py&lt;br&gt;&lt;b style="color:#ff0000"&gt;root&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 28560&amp;nbsp; 0.0&amp;nbsp; 0.0&amp;nbsp; 74188&amp;nbsp; 1756 pts/11&amp;nbsp;&amp;nbsp; T&amp;nbsp;&amp;nbsp;&amp;nbsp; 13:56&amp;nbsp;&amp;nbsp; 0:00&amp;nbsp; |&amp;nbsp;&amp;nbsp; |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; \_ python root.py&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3716332712483078149?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3716332712483078149/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/11/seteuid.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3716332712483078149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3716332712483078149'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/11/seteuid.html' title='seteuid'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2951833087435358672</id><published>2010-11-04T20:19:00.001-07:00</published><updated>2010-11-04T20:19:50.921-07:00</updated><title type='text'>使用strace找出问题根本点</title><content type='html'>&amp;#20170;&amp;#22825;&amp;#24819;&amp;#22791;&amp;#20221;&amp;#19968;&amp;#20010;svn&amp;#20179;&amp;#24211;&amp;#12290;&amp;#20294;&amp;#26159;&amp;#30896;&amp;#21040;&amp;ldquo;&amp;#39740;&amp;rdquo;&amp;#20102;&amp;#12290;&amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;$ sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync&amp;nbsp; sync file:///data/repos/xxoo&lt;br&gt;svnsync: Revprop change blocked by pre-revprop-change hook (exit code 255) with no output.&lt;br&gt;&lt;br&gt;&amp;#30475;&amp;#19978;&amp;#21435;&amp;#26159;svn&amp;#30340;pre-revprop-change hook&amp;#20986;&amp;#20102;&amp;#38382;&amp;#39064;&amp;#12290;&amp;#20294;&amp;#26159;&amp;#26080;&amp;#35770;&amp;#25105;&amp;#24590;&amp;#20040;&amp;#25240;&amp;#33150;pre-revprop-change hook&amp;#20195;&amp;#30721;&amp;#37117;&amp;#19981;&amp;#32473;&amp;#21147;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#21448;&amp;#24576;&amp;#30097;&amp;#26159;&amp;#29615;&amp;#22659;&amp;#21464;&amp;#37327;&amp;#65292; &amp;#36830;sudo&amp;#30340;-E&amp;#37117;&amp;#20351;&amp;#29992;&amp;#19978;&amp;#20102;&amp;#36824;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#23617;&amp;#29992;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#26080;&amp;#22856;&amp;#19979;&amp;#21482;&amp;#33021;&amp;#20351;&amp;#29992;strace&amp;#30475;&amp;#30475;&amp;#65306;&lt;br&gt;$ sudo -u daemon HOME=/tmp strace -f /usr/local/subversion/bin/svnsync&amp;nbsp; sync file:///data/repos/xxoo 2&amp;gt;&amp;amp;1 |less&lt;br&gt;&lt;br&gt;&amp;#19968;&amp;#23450;&amp;#35201;&amp;#20351;&amp;#29992;-f&amp;#65292; &amp;#22240;&amp;#20026;svnsync&amp;#20135;&amp;#29983;&amp;#20102;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#65292; &amp;#36825;&amp;#26679;&amp;#21487;&amp;#20197;&amp;#36830;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#37117;&amp;#21487;&amp;#20197;&amp;#34987;trace&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#30475;&amp;#21040;&amp;#19968;&amp;#21477;&amp;#30456;&amp;#24403;&amp;#21487;&amp;#30097;&amp;#30340;trace&amp;#26465;&amp;#30446;&amp;#65306;&lt;br&gt;[pid&amp;nbsp; 6548] chdir(&amp;quot;.&amp;quot;)&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; = -1 EACCES (Permission denied)&lt;br&gt;&lt;br&gt;&amp;#21571;&amp;#12290;&amp;#12290;&amp;#12290;&amp;#12290;&amp;#12290;&amp;#32454;&amp;#33410;&amp;#12290;&amp;#21407;&amp;#26469;work directory&amp;#26159;~, &amp;#20999;&amp;#25442;&amp;#25104;daemon&amp;#36816;&amp;#34892;&amp;#30340;svnsync&amp;#27809;&amp;#26377;&amp;#26435;&amp;#38480;&amp;#12290;&amp;#12290;&amp;#12290;&amp;#12290;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#26679;&amp;#23601;&amp;#27809;&amp;#26377;&amp;#38382;&amp;#39064;&amp;#20102;&amp;#65306;&lt;br&gt;$ cd / &amp;amp;&amp;amp; sudo -u daemon HOME=/tmp /usr/local/subversion/bin/svnsync&amp;nbsp; sync file:///data/repos/xxoo&lt;br&gt;&lt;br&gt;&amp;#30495;&amp;#26159;&amp;#32454;&amp;#33410;&amp;#12290;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2951833087435358672?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2951833087435358672/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/11/strace_5464.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2951833087435358672'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2951833087435358672'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/11/strace_5464.html' title='使用strace找出问题根本点'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-6165703247823768472</id><published>2010-10-14T19:36:00.001-07:00</published><updated>2010-10-14T19:50:12.936-07:00</updated><title type='text'>devfs与udev</title><content type='html'>/dev &amp;#30446;&amp;#24405;disk-based&amp;#36824;&amp;#26159;kernel-based&amp;#30340;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;?&lt;br&gt;&amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#19968;&amp;#30452;&amp;#27809;&amp;#26377;&amp;#20998;&amp;#24320;.&lt;br&gt;&amp;#20174;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#23454;&amp;#36341;&amp;#21644;&amp;lt;&amp;lt;Linux&amp;#25805;&amp;#20316;&amp;#31995;&amp;#32479;&amp;#20043;&amp;#22885;&amp;#31192;&amp;gt;&amp;gt;&amp;#19968;&amp;#20070;, &amp;#26126;&amp;#26174;/dev&amp;#26159;disk-based&amp;#30340;. &amp;#26412;&amp;#20154;&amp;#27809;&amp;#26377;&amp;#20351;&amp;#29992;&amp;#36807;devfs&lt;br&gt;&lt;br&gt;linux2.4 kernel&amp;#26102;&amp;#20195;&amp;#20351;&amp;#29992;devfs&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;. linux 2.6 kernel&amp;#24050;&amp;#32463;&amp;#21435;&amp;#25481;devfs&amp;#20195;&amp;#30721;&amp;#20102;.&lt;br&gt;&lt;br&gt;&amp;#24819;&amp;#26597;&amp;#26597;devfs&amp;#30340;&amp;#25991;&amp;#26723;&amp;#37117;&amp;#19981;&amp;#23481;&amp;#26131;, &amp;#23427;&amp;#30340;&amp;#20316;&amp;#32773;&amp;#26087;blog&amp;#19978;&amp;#30340;&amp;#25991;&amp;#31456;&amp;#37117;&amp;#25214;&amp;#19981;&amp;#21040;&amp;#20102;.&lt;br&gt;&lt;br&gt;google&amp;#21040; &lt;br&gt;&amp;nbsp;* http://www.linuxjournal.com/article/6035&lt;br&gt;&amp;nbsp;* http://www.ibm.com/developerworks/linux/library/l-devfs.html&lt;br&gt;&amp;#20174;&amp;#26102;&amp;#38388;&amp;#19978;&amp;#30475;&amp;#24456;&amp;#32769;&amp;#30340;, &amp;#20026;&amp;#20102;&amp;#30830;&amp;#35748;&amp;#24180;&amp;#20195;, &amp;#26597;&amp;#30475;&amp;#20102;kernel&amp;#30340;timeline, &amp;#21487;&amp;#20197;&amp;#30830;&amp;#35748;&amp;#36825;&amp;#26159;&amp;quot;&amp;#21516;&amp;#19968;&amp;#26102;&amp;#20195;&amp;quot;&amp;#30340;&amp;#20135;&amp;#29289;:&lt;br&gt;&amp;nbsp;* http://en.wikipedia.org/wiki/Linux_kernel#Timeline&lt;br&gt;&lt;br&gt;&amp;#27809;&amp;#26377;&amp;#29992;&amp;#36807;devfs. &amp;#20026;&amp;#20102;&amp;#27714;&amp;#30495;&amp;#30456;, &amp;#38382;&amp;#26379;&amp;#21451;&amp;#20511;&amp;#20102;&amp;#20010;redhat8&amp;#29615;&amp;#22659;&amp;#30340;linux, &amp;#32467;&amp;#26524;devfs&amp;#27809;&amp;#26377;&amp;#34987;&amp;#40664;&amp;#35748;&amp;#32534;&amp;#20837;kernel:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;# cat /boot/config-2.4.18-14 |grep DEVFS&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;# CONFIG_DEVFS_FS is not set&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#20294;&amp;#26159;redhat8&amp;#19979;&amp;#30340;/dev&amp;#30340;&amp;#30830;&amp;#26377;18 thousand entries (&amp;#27604;&amp;#36739;&amp;#24778;&amp;#20154;)&lt;br&gt;/dev &amp;#30446;&amp;#24405;disk-based&amp;#36824;&amp;#26159;kernel-based&amp;#30340;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;? &amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#27809;&amp;#26377;&amp;#29615;&amp;#22659;&amp;#37117;&amp;#27809;&amp;#27861;&amp;#20146;&amp;#30524;&amp;#30475;&amp;#21040;. &amp;#20027;&amp;#33021;&amp;#25214;&amp;#21040;&amp;#30340;&amp;#25991;&amp;#26723;&amp;#37324;&amp;#25214;, &amp;#26377;&amp;#20123;&amp;#25991;&amp;#20214;&amp;#26159;&amp;#20351;&amp;#29992;pseudo filesystem&amp;#31216;&amp;#21628;devfs&amp;#30340;(&amp;#20363;&amp;#22914;&amp;#36825;&amp;#31687;: http://www.linux.org/docs/ldp/howto/SCSI-2.4-HOWTO/devfs.html)&lt;br&gt;&lt;br&gt;&amp;#22312; http://www.linuxjournal.com/article/6035 &amp;#19968;&amp;#25991;&amp;#20013;, &amp;#25551;&amp;#36848;&amp;#20102;&amp;#20351;&amp;#29992;devfs&amp;#30340;&amp;#22909;&amp;#22788;:&lt;br&gt;1. &amp;#31995;&amp;#32479;&amp;#33258;&amp;#21160;&amp;#31649;&amp;#29702;/dev&amp;#19979;&amp;#30340;&amp;#25991;&amp;#20214;&lt;br&gt;2. &amp;#21487;&amp;#20197;&amp;#34987;read only &amp;#30340;&amp;#26041;&amp;#27861;mount&amp;#21040;&amp;#31995;&amp;#32479;&amp;#21644;/dev&amp;#21019;&amp;#24314;&amp;#22312;non-unix file system&amp;#19978;&lt;br&gt;&lt;br&gt;&amp;#25991;&amp;#26723;&amp;#29305;&amp;#27530;&amp;#25552;&amp;#21040;&amp;#20102;non-unix file system. &amp;#22240;&amp;#20026;dev entry&amp;#26159;&amp;#36824;&amp;#26377;&amp;#19968;&amp;#20123;&amp;#39069;&amp;#22806;&amp;#30340;&amp;#20449;&amp;#24687;. &amp;#19979;&amp;#38754;&amp;#22312;fat32&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;&amp;#19978;&amp;#21019;&amp;#24314;&amp;#19968;&amp;#20010;dev entry:&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;[jessinio@niowork NO_NAME]$ sudo mknod dev_entry c 240 1&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;mknod: `dev_entry&amp;#39;: Operation not permitted&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30830;&amp;#23450;devfs&amp;#19968;&amp;#20010;&amp;#23384;&amp;#22312;&amp;#20110;&amp;#20869;&amp;#23384;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;.&lt;br&gt;&lt;br&gt;devfs&amp;#24050;&amp;#32463;&amp;#34987;&amp;#28120;&amp;#27760;, &amp;#34987;udev&amp;#21462;&amp;#20195;. udev&amp;#27604;devfs&amp;#24102;&amp;#26469;&amp;#20160;&amp;#20040;&amp;#22909;&amp;#22788;?&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#24819;&amp;#20180;&amp;#32454;&amp;#20102;&amp;#35299;&amp;#26377;&amp;#20160;&amp;#20040;&amp;#20248;&amp;#28857;, &amp;#35831;&amp;#38405;&amp;#35835;udev&amp;#20316;&amp;#32773;&amp;#20889;&amp;#30340;&amp;#25991;&amp;#31456;: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev_vs_devfs&lt;br&gt;&lt;br&gt;&amp;#27604;&amp;#36739;&amp;#28145;&amp;#21051;&amp;#30340;&amp;#26159;&amp;#20004;&amp;#26465;:&lt;br&gt;1. &amp;#21487;&amp;#20197;&amp;#38543;&amp;#24847;&amp;#21629;&amp;#21517;&amp;#35774;&amp;#22791;&amp;#25991;&amp;#20214;&amp;#22312;/dev&amp;#19979;&amp;#30340;entry&amp;#21517;&lt;br&gt;2. allow everyone to not care about major/minor numbers&lt;br&gt;&lt;br&gt;&amp;#21040;&amp;#36825;&amp;#37324;, &amp;#21448;&amp;#38656;&amp;#35201;&amp;#25226;&amp;#35270;&amp;#32447;&amp;#36716;&amp;#31227;&amp;#21040;sysfs&amp;#19978;&amp;#38754;&amp;#20102;. &lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-6165703247823768472?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/6165703247823768472/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/10/devfsudev.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6165703247823768472'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6165703247823768472'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/10/devfsudev.html' title='devfs与udev'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3332612987656063226</id><published>2010-10-11T00:05:00.001-07:00</published><updated>2010-10-11T00:05:38.057-07:00</updated><title type='text'>足够数目的getdents调用与文件数目引发的问题</title><content type='html'>&amp;#32593;&amp;#31449;&amp;#30340;&amp;#36895;&amp;#24230;&amp;#24456;&amp;#24930;&amp;#12290;&amp;#35201;&amp;#27714;&amp;#32473;&amp;#20010;&amp;#29702;&amp;#30001;&amp;#12290;&amp;#20110;&amp;#26159;&amp;#30331;&amp;#26426;top&amp;#20102;&amp;#19968;&amp;#25226;&amp;#12290;&amp;#22914;&amp;#19979;&lt;br&gt;&lt;br&gt;PID USER&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PR&amp;nbsp; NI&amp;nbsp; VIRT&amp;nbsp; RES&amp;nbsp; SHR S %CPU %MEM&amp;nbsp;&amp;nbsp;&amp;nbsp; TIME+&amp;nbsp; COMMAND&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;29131 liangqin&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0 15068 3444&amp;nbsp; 816 R 11.7&amp;nbsp; 0.0&amp;nbsp;&amp;nbsp; 0:00.72 top&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;16371 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 181m 8484 3128 D&amp;nbsp; 5.2&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:01.20 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;5726 kmmaster&amp;nbsp; 15&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 182m 9352 3564 S&amp;nbsp; 3.9&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:02.24 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;32548 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 183m 9.8m 3348 D&amp;nbsp; 3.9&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:06.16 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;nbsp;6199 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 183m 9444 3452 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:01.89 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;7697 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 182m 8848 3184 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:01.94 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;10536 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 181m 8692 3332 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:01.93 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;15102 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 181m 8420 3060 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:01.37 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;17993 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 181m 8708 3292 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:04.16 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;23185 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 182m 9420 3428 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:00.61 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;30189 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 181m 8724 3308 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:05.91 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;30337 kmmaster&amp;nbsp; 16&amp;nbsp;&amp;nbsp; 0&amp;nbsp; 183m 9.9m 3448 D&amp;nbsp; 2.6&amp;nbsp; 0.1&amp;nbsp;&amp;nbsp; 0:02.71 httpd&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;strace&amp;#21629;&amp;#20196;&amp;#26597;&amp;#30475;D&amp;#29366;&amp;#24577;&amp;#30340;httpd, &amp;#37117;&amp;#26159;&amp;#35843;&amp;#29992;getdents, stat, unlink&amp;#31561;IO&amp;#20989;&amp;#25968;&amp;#65292; &amp;#22914;&amp;#65306;&lt;br&gt;stat(&amp;quot;/tmp/sess_bc45d5d1dd8739acceff8a3e0fec0585&amp;quot;, {st_mode=S_IFREG|0600, st_size=0, ...}) = 0&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;ls&amp;#65292; find&amp;#20043;&amp;#31867;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#37117;&amp;#26080;&amp;#27861;&amp;#23545;&amp;#27492;&amp;#30446;&amp;#24405;(&amp;#25351;/tmp)&amp;#36827;&amp;#34892;&amp;#25968;&amp;#25454;&amp;#26597;&amp;#30475;&amp;#12290;&amp;#34892;&amp;#20026;freeze&amp;#12290;&amp;#20063;&amp;#26159;&amp;#36827;&amp;#20837;D&amp;#29366;&amp;#24577;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#26412;&amp;#24819;&amp;#20351;&amp;#29992;python&amp;#30340;os.listdir&amp;#20989;&amp;#25968;&amp;#30340;&amp;#12290;&amp;#20294;&amp;#36825;&amp;#20010;&amp;#20989;&amp;#25968;&amp;#26159;&amp;#35835;&amp;#23436;&amp;#30446;&amp;#24405;&amp;#30340;entry&amp;#21518;&amp;#25165;&amp;#36820;&amp;#22238;list&amp;#30340;&amp;#12290; &amp;#20063;&amp;#26159;&amp;#35201;&amp;#24930;&amp;#24456;&amp;#38271;&amp;#26102;&amp;#38388;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#20110;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#19979;&amp;#38754;&amp;#30340;C&amp;#20195;&amp;#30721;&amp;#65306;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br&gt;#include &amp;lt;dirent.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;int main(int argc, char * argv[])&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DIR *dirp = opendir(&amp;quot;/tmp&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct dirent *retval;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; long long int t;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(; ; ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval = readdir(dirp);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (retval == NULL) {break;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else {printf(&amp;quot;%s\n&amp;quot;, retval-&amp;gt;d_name); t++;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%lld\n&amp;quot;, t);&lt;br&gt;}&amp;nbsp;&amp;nbsp; &lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#30446;&amp;#24405;&amp;#25991;&amp;#20214;&amp;#24635;&amp;#25968;&amp;#26159; 221346&lt;br&gt;&lt;br&gt;httpd&amp;#30340;&amp;#36827;&amp;#31243;&amp;#25968;&amp;#26377;3K&amp;#65281;&amp;#27599;&amp;#20010;&amp;#38656;&amp;#35201;session&amp;#30340;&amp;#36827;&amp;#31243;&amp;#37117;&amp;#35201;&amp;#35835;/tmp&amp;#30446;&amp;#24405;&amp;#19979;&amp;#30340;entry&amp;#65292; &amp;#36825;&amp;#20010;&amp;#34892;&amp;#20026;&amp;#20250;&amp;#23545;3K&amp;#25968;&amp;#30446;&amp;#30340;httpd&amp;#36827;&amp;#31243;&amp;#26377;&amp;#24456;&amp;#22823;&amp;#30340;&amp;#24433;&amp;#21709;&amp;#21527;&amp;#65311; &lt;br&gt;&lt;br&gt;&amp;#20110;&amp;#26159;&amp;#33258;&amp;#24049;&amp;#20889;&amp;#20102;&amp;#20010;&amp;#27979;&amp;#35797;&amp;#20195;&amp;#30721;&amp;#65292; &amp;#30446;&amp;#30340;&amp;#23601;&amp;#26159;&amp;#27979;&amp;#35797;&amp;#20247;&amp;#22810;&amp;#30340;readdir&amp;#20989;&amp;#25968;&amp;#26159;&amp;#21542;&amp;#23545;&amp;#36827;&amp;#31243;&amp;#26377;&amp;#24433;&amp;#21709;&amp;#65306;&lt;br&gt;#coding:utf-8&lt;br&gt;import time&lt;br&gt;import os&lt;br&gt;&lt;br&gt;for i in range(300):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid = os.fork()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pid &amp;gt; 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&lt;br&gt;for r in range(30):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; time.sleep(0.1)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.listdir(&amp;quot;/tmp&amp;quot;)&lt;br&gt;&lt;br&gt;&amp;#20195;&amp;#30721;&amp;#24456;&amp;#31616;&amp;#21333;&amp;#65292; &amp;#20294;&amp;#26159;&amp;#23545;&amp;#20110;200K&amp;#26465;&amp;#30446;&amp;#30340;directory&amp;#26469;&amp;#35828;&amp;#65292; &amp;#24456;&amp;#32473;&amp;#21147;&amp;#65281;&amp;#65281;&amp;#20986;&amp;#29616;&amp;#22823;&amp;#37327;&amp;#30340;D&amp;#29366;&amp;#24577;&amp;#36827;&amp;#31243;&amp;#65306;&lt;br&gt;(........&amp;#34987;&amp;#25130;&amp;#21435;......)&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7072&amp;nbsp; 0.1&amp;nbsp; 0.0&amp;nbsp; 84244 11628 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7073&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85136 12448 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7074&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85136 12628 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7075&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 86304 13588 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7076&amp;nbsp; 0.1&amp;nbsp; 0.0&amp;nbsp; 84764 12264 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7077&amp;nbsp; 0.1&amp;nbsp; 0.0&amp;nbsp; 84504 12036 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7078&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85136 12672 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7079&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85916 13360 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7080&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85916 13448 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7081&amp;nbsp; 0.2&amp;nbsp; 0.1&amp;nbsp; 89728 16964 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7082&amp;nbsp; 0.2&amp;nbsp; 0.1&amp;nbsp; 88268 15776 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7083&amp;nbsp; 0.2&amp;nbsp; 0.1&amp;nbsp; 88268 15596 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7084&amp;nbsp; 0.2&amp;nbsp; 0.1&amp;nbsp; 87344 14820 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7085&amp;nbsp; 0.1&amp;nbsp; 0.1&amp;nbsp; 85136 12628 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;905&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 7086&amp;nbsp; 0.2&amp;nbsp; 0.1&amp;nbsp; 86304 13812 pts/2&amp;nbsp;&amp;nbsp;&amp;nbsp; D+&amp;nbsp;&amp;nbsp; 14:45&amp;nbsp;&amp;nbsp; 0:00 python listdir.py&lt;br&gt;(......&amp;#34987;&amp;#25130;&amp;#21435;.......)&lt;br&gt;&lt;br&gt;&amp;#26426;&amp;#22120;&amp;#30340;&amp;#20869;&amp;#23384;&amp;#20351;&amp;#29992;&amp;#37327;&amp;#24555;&amp;#36895;&amp;#19978;&amp;#21319;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3332612987656063226?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3332612987656063226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/10/getdents.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3332612987656063226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3332612987656063226'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/10/getdents.html' title='足够数目的getdents调用与文件数目引发的问题'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2553499412000874057</id><published>2010-10-06T00:38:00.001-07:00</published><updated>2010-10-06T00:41:40.352-07:00</updated><title type='text'>broadcast</title><content type='html'>&amp;#24456;&amp;#23569;&amp;#20351;&amp;#29992;UDP&amp;#21327;&amp;#35758;&amp;#21644;&amp;#21407;&amp;#22987;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#65292; &amp;#25152;&amp;#20197;&amp;#23545;broadcast&amp;#36825;&amp;#31181;&amp;#29305;&amp;#27530;&amp;#22320;&amp;#22336;&amp;#20351;&amp;#29992;&amp;#19981;&amp;#22810;&amp;#12290;&lt;br&gt;&amp;#30693;&amp;#35782;&amp;#24635;&amp;#26159;&amp;#20851;&amp;#32852;&amp;#22312;&amp;#19968;&amp;#36215;&amp;#30340;&amp;#12290;&amp;#20170;&amp;#22825;&amp;#22312;&amp;#30475;LVS-DR&amp;#27169;&amp;#24335;&amp;#30340;&amp;#37197;&amp;#32622;&amp;#26102;&amp;#65292;&amp;#21457;&amp;#29616;&amp;#23545;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#37197;&amp;#32622;&amp;#26377;&amp;#20123;&amp;#19981;&amp;#29702;&amp;#35299;&amp;#65306;&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;# ifconfig lo:0 IP_Adress &lt;b&gt;broadcast&lt;/b&gt; IP_Adress netmask 255.255.255.255 up&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;# route add -host IP_Adress dev lo:0&lt;/font&gt;&lt;br&gt;&amp;nbsp;* &lt;i&gt;IP_Adress&amp;#20026;IP&amp;#22320;&amp;#22336;&lt;/i&gt;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#21482;&amp;#26159;&amp;#20026;&amp;#20102;&amp;#37197;&amp;#32622;LVS&amp;#30340;&amp;#35805;&amp;#65292;&amp;#23601;&amp;#19981;&amp;#38656;&amp;#35201;&amp;#29702;&amp;#20250;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#35821;&amp;#21477;&amp;#32972;&amp;#21518;&amp;#30340;&amp;#21407;&amp;#29702;&amp;#65292;&amp;#20294;&amp;#20316;&amp;#20026;&amp;#25216;&amp;#26415;&amp;#25511;&amp;#65292;&amp;#24456;&amp;#24076;&amp;#26395;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#23427;&amp;#32972;&amp;#21518;&amp;#21518;&amp;#21407;&amp;#29702;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#32080;&amp;#26524;&amp;#21457;&amp;#29616;&amp;#32972;&amp;#21518;&amp;#26159;&amp;#22909;&amp;#22823;&amp;#19968;&amp;#20010;&amp;#22353;&amp;#65292;&amp;#26368;&amp;#32463;&amp;#20856;&amp;#30340;&amp;#38382;&amp;#39064;&amp;#23601;&amp;#26159;LVS&amp;#30340;ARP&amp;#38382;&amp;#39064;&amp;#65306; &lt;br&gt;&amp;nbsp;* http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html&lt;br&gt;&amp;#37117;&amp;#19982;broadcast&amp;#26377;&amp;#20851;&amp;#31995;. &amp;#20808;&amp;#23545;broadcast&amp;#19979;&amp;#25163;:&lt;br&gt;&lt;br&gt;&amp;#20026;&amp;#20160;&amp;#20040; broadcast&amp;#19982;IP_Adress&amp;#30456;&amp;#21516;&amp;#65292; &amp;#32780;&amp;#19981;&amp;#26159;&amp;#24120;&amp;#29992;&amp;#30340;172.16.2.255&amp;#36825;&amp;#31181;&amp;#29305;&amp;#27530;IP&amp;#65311;&lt;br&gt;&amp;#39318;&amp;#20808;&amp;#65292; broadcast&amp;#26377;&amp;#22914;&amp;#19979;&amp;#20960;&amp;#31181;&amp;#65306;&lt;br&gt;1. layer 2 broadcast&lt;br&gt;2. layer 3 broadcast&lt;br&gt;3. unicast&lt;br&gt;4. multicast&lt;br&gt;&lt;br&gt;&amp;#35201;&amp;#30693;&amp;#36947;broadcast&amp;#30340;&amp;#20316;&amp;#29992;&amp;#26159;&amp;quot;&amp;#19968;&amp;#23545;&amp;#22810;&amp;quot;, &amp;#19968;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#21457;&amp;#20986;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#22810;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#26377;&amp;#20852;&amp;#36259;&amp;#25509;&amp;#25910;. &amp;#36825;&amp;#31181;&amp;#29305;&amp;#28857;&amp;#26159;TCP&amp;#21327;&amp;#35758;&amp;#27809;&amp;#26377;&amp;#30340;. &lt;br&gt;&amp;#19979;&amp;#38754;&amp;#20351;&amp;#29992;UDP&amp;#21327;&amp;#35758;&amp;#26469;&amp;#20030;&amp;#20010;layer 3&amp;#30340;&amp;#20363;&amp;#23376;:&lt;br&gt;&amp;#25509;&amp;#25910;&amp;#31471;(&amp;#35843;&amp;#29992;bind&amp;#20989;&amp;#25968;), &amp;#36825;&amp;#19968;&amp;#31471;&amp;#30340;&amp;#26426;&amp;#22120;&amp;#21487;&amp;#20197;&amp;#22810;&amp;#21488;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;import socket&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;import sys&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;x = (&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;, 51423)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s.bind(x)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;(buf, address) = s.recvfrom(2048)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s.sendto(&amp;quot;Hi&amp;quot;, address)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#21457;&amp;#36865;&amp;#31471;(&amp;#35843;&amp;#29992;send&amp;#20989;&amp;#25968;):&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;import socket&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;import sys&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;x = (&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;,&lt;/b&gt; 51423)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;s.sendto(&amp;quot;Hi&amp;quot;, x)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;(buf, address) = s.recvfrom(2048)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;print &amp;quot;Received from %s: %s&amp;quot; % (address, buf)&lt;/font&gt;&lt;br&gt;&lt;br&gt;send&amp;#31471;&amp;#20351;&amp;#29992;&amp;#30340;&lt;font style="background-color:#b6d7a8"&gt;&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;&lt;/b&gt;&lt;/font&gt; &amp;#24456;&amp;#21478;&amp;#31867;: &amp;#19981;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#20855;&amp;#20307;&amp;#30340;IP&amp;#22320;&amp;#22336;, &amp;#32780;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#20195;&amp;#21517;&amp;#35789;.&lt;br&gt;&amp;#22238;&amp;#21040;&amp;#19978;&amp;#38754;&amp;#30340;ifconfig&amp;#20363;&amp;#23376;, &amp;#36825;&amp;#20010;&lt;font style="background-color:#b6d7a8"&gt;&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;&lt;/b&gt;&lt;/font&gt; &amp;#20854;&amp;#23454;&amp;#23601;&amp;#26159;NIC&amp;#37324;&amp;#30340;broadcast&amp;#21442;&amp;#25968;.&lt;br&gt;&amp;#22914;&amp;#26524;NIC&amp;#30340;&amp;#21442;&amp;#25968;&amp;#19981;&amp;#21516;, &lt;font style="background-color:#b6d7a8"&gt;&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;&lt;/b&gt;&lt;/font&gt; &amp;#20195;&amp;#34920;&amp;#30340;&amp;#24847;&amp;#20041;&amp;#23601;&amp;#19981;&amp;#21516;. &lt;br&gt;&amp;#20174;&amp;#21457;&amp;#36865;&amp;#31471;&amp;#30475;:&lt;br&gt;send&amp;#20989;&amp;#25968;&amp;#21457;&amp;#20986;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#37324;&amp;#30340;destination&amp;#22320;&amp;#22336;&amp;#20026;&lt;font style="background-color:#b6d7a8"&gt;&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&amp;#20174;&amp;#25509;&amp;#25910;&amp;#31471;&amp;#30475;:&lt;br&gt;recvfrom&amp;#20989;&amp;#25968;&amp;#21482;&amp;#25509;&amp;#25910;destination&amp;#22320;&amp;#22336;&amp;#20026;NIC&amp;#37324;&lt;font style="background-color:#b6d7a8"&gt;&lt;b style="color:#ff0000"&gt;&amp;#39;&amp;lt;broadcast&amp;gt;&amp;#39;&lt;/b&gt;&lt;/font&gt; &amp;#21442;&amp;#25968;&amp;#30340;&amp;#24191;&amp;#25773;&amp;#21253;.&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#9fc5e8"&gt;&amp;#25152;&amp;#20197;, &amp;#19978;&amp;#38754;&amp;#30340;ifconfig&amp;#35774;&amp;#32622;&amp;#26126;&amp;#26174;&amp;#26159;&amp;#19981;&amp;#24819;&amp;#26381;&amp;#21153;&amp;#22120;&amp;#25509;&amp;#25910;layer 3&amp;#30340;&amp;#24191;&amp;#25773;&amp;#20449;&amp;#24687;( &amp;#20363;&amp;#22914;destination&amp;#20026;192.168.0.255&amp;#36825;&amp;#31181;&amp;#25968;&amp;#25454;&amp;#21253;)&lt;/font&gt;&lt;br&gt;&lt;div style="margin-left:40px"&gt;&amp;#20174;netmask&amp;#30340;&amp;#35282;&amp;#24230;&amp;#21487;&amp;#20197;&amp;#36825;&amp;#26679;&amp;#24605;&amp;#32771;: &lt;br&gt;ifconfig lo:0 192.168.0.10 broadcast 192.168.0.10 netmask 255.255.255.255&amp;#21487;&amp;#20197;&amp;#21464;&amp;#24418;&amp;#25104;ifconfig lo:0 192.168.0.10 netmask 255.255.255.255&lt;br&gt;&amp;#23427;&amp;#20204;&amp;#19982;&lt;br&gt;ifconfig lo:0 192.168.0.10 netmask 255.255.255.0&lt;br&gt;&amp;#26159;&amp;#23646;&amp;#20110;&amp;#19981;&amp;#21516;&amp;#30340;subnet, &amp;#25152;&amp;#20197;192.168.0.0/24&amp;#30340;&amp;#20449;&amp;#24687;&amp;#23545;&amp;#20110;&amp;#32593;&amp;#27573;192.168.0.0/32&amp;#26159;&amp;#19981;&amp;#20250;&amp;#25509;&amp;#25910;&amp;#30340;&lt;br&gt;&lt;/div&gt;&amp;#36825;&amp;#31181;&amp;#21333;&amp;#19968;&amp;#30340;&amp;#24191;&amp;#25773;&amp;#22320;&amp;#22336;&amp;#34987;&amp;#31216;&amp;#20026; unicast&lt;br&gt;broadcast&amp;#36824;&amp;#26377;layer 2&amp;#30340;. &amp;#20856;&amp;#22411;&amp;#30340;&amp;#20363;&amp;#23376;&amp;#23601;&amp;#26159;arp&amp;#21327;&amp;#35758;. &amp;#20351;&amp;#29992;&amp;#30340;&amp;#20197;&amp;#22826;&amp;#32593;&amp;#24191;&amp;#25773;&amp;#22320;&amp;#22336;: FF.FF.FF.FF.FF.FF &amp;#20316;&amp;#20026;destination&lt;br&gt;&lt;br&gt;linux&amp;#19979;&amp;#27809;&amp;#26377;CLI&amp;#25509;&amp;#21475;&amp;#30340;&amp;#21629;&amp;#20196;&amp;#21487;&amp;#20197;&amp;#21457;&amp;#20986;arp&amp;#35831;&amp;#27714;&amp;#21253;. &amp;#22240;&amp;#20026;arp&amp;#21151;&amp;#33021;&amp;#25918;&amp;#22312;kernel&amp;#20013;(&amp;#21487;&amp;#20197;&amp;#30475;&amp;#25163;&amp;#20876;man 7 arp), layer 3&amp;#30340;&amp;#25968;&amp;#25454;&amp;#21387;&amp;#21040;layer 2&amp;#26102;kernel&amp;#20026;&amp;#33258;&amp;#21160;&amp;#35843;&amp;#29992;arp&amp;#35831;&amp;#27714;&amp;#21253;(&amp;#22914;&amp;#26524;&amp;#26159;&amp;#38656;&amp;#27714;&amp;#30340;&amp;#35805;).&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#35201;&amp;#25163;&amp;#21160;&amp;#21457;&amp;#20986;&amp;#36825;&amp;#31181;&amp;#35831;&amp;#27714;&amp;#20063;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#30340;, &amp;#27604;&amp;#22914;&amp;#36825;&amp;#27573;&amp;#20195;&amp;#30721;: http://svn.pythonfr.org/public/pythonfr/utils/network/arp-flood.py&lt;br&gt;&lt;br&gt;&amp;#24403;ping&amp;#19968;&amp;#20010;IP&amp;#26102;, &amp;#31995;&amp;#32479;&amp;#30340;arp&amp;#34920;&amp;#31034;&amp;#37324;&amp;#27809;&amp;#26377;&amp;#19982;IP&amp;#23545;&amp;#24212;&amp;#30340;&amp;#26465;&amp;#30446;&amp;#26102;kernel&amp;#26159;&amp;#20250;&amp;#21457;&amp;#20986;arp&amp;#35831;&amp;#27714;&amp;#21253;&amp;#30340;, &amp;#25152;&amp;#20197;&amp;#20026;&amp;#20102;&amp;#27979;&amp;#35797;, &amp;#21487;&amp;#20197;&amp;#22312;&amp;#28165;&amp;#38500;arp&amp;#26465;&amp;#30446;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;,&amp;#22312;&amp;#20004;&amp;#26426;&amp;#20043;&amp;#38388;ping&amp;#23545;&amp;#26041;. &lt;br&gt;&amp;#22914;&amp;#19979;&amp;#20195;&amp;#30721;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;import socket&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;soc = socket.socket(socket.PF_PACKET, socket.SOCK_RAW) #create the raw-socket&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;soc.bind((&amp;quot;wlan0&amp;quot;,0x0806)) # ether type for ARP&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;data = soc.recv(1024)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#31243;&amp;#24207;&amp;#23646;&amp;#20110;&amp;#25509;&amp;#25910;&amp;#31471;, &amp;#31243;&amp;#24207;&amp;#36816;&amp;#34892;&amp;#21518;&amp;#20250;&amp;#19968;&amp;#30452;block, &amp;#30452;&amp;#21040;&amp;#25509;&amp;#25910;&amp;#21040;&amp;#19968;&amp;#20010;arp&amp;#35831;&amp;#27714;. &amp;#21521;&amp;#23376;&amp;#32593;&amp;#30340;&amp;#25152;&amp;#26377;&amp;#26426;&amp;#22120;&amp;#35810;&amp;#38382;&amp;#30340;MAC, &amp;#25152;&amp;#20197;&amp;#26159;&amp;quot;&amp;#19968;&amp;#23545;&amp;#22810;&amp;quot;, &amp;#36825;&amp;#26102;&amp;#23601;&amp;#38656;&amp;#35201;&amp;#20351;&amp;#29992;&amp;#21040;&amp;#24191;&amp;#25773;&amp;#22320;&amp;#22336;, layer 2&amp;#30340;&amp;#24191;&amp;#25773;&amp;#22320;&amp;#22336;&amp;#20026;FF.FF.FF.FF.FF.FF.&lt;br&gt;&lt;br&gt;&amp;#19982;layer 3&amp;#30456;&amp;#27604;, layer 2&amp;#30340;&amp;#24191;&amp;#25773;&amp;#22320;&amp;#22336;&amp;#19981;&amp;#26159;&amp;#22312;NIC&amp;#19978;&amp;#37197;&amp;#32622;&amp;#30340;, &amp;#20294;&amp;#26159;LVS-DR&amp;#27169;&amp;#24335;&amp;#21448;&amp;#24076;&amp;#26395;real server&amp;#19981;&amp;#35201;&amp;#21709;&amp;#24212;&amp;#21644;&amp;#21457;&amp;#20986;arp&amp;#35831;&amp;#27714;, &amp;#20110;&amp;#26159;, LVS-DR&amp;#30340;arp&amp;#38382;&amp;#39064;&amp;#23601;&amp;#20135;&amp;#29983;&amp;#20102;. &amp;#20063;&amp;#23601;&amp;#26159;&amp;#25991;&amp;#31456;&amp;#24320;&amp;#22836;&amp;#30340;route add&amp;#21629;&amp;#20196;&amp;#30340;&amp;#21407;&amp;#29702;. &amp;#33267;&amp;#20110;&amp;#36825;&amp;#20010;&amp;#21407;&amp;#29702;&amp;#36825;&amp;#37324;&amp;#23601;&amp;#19981;&amp;#20889;&amp;#20102;. &amp;#35748;&amp;#30495;&amp;#38405;&amp;#35835;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#25991;&amp;#31456;&amp;#21363;&amp;#21487;, &amp;#19979;&amp;#38754;&amp;#30340;&amp;#25991;&amp;#31456;&amp;#28041;&amp;#21450;&amp;#20102;linux kernel&amp;#30340;&amp;#22810;&amp;#20010;&amp;#29256;&amp;#26412;, &amp;#22914;2.0.x, 2.2.x, 2.6.x.&lt;br&gt;http://www.austintek.com/LVS/LVS-HOWTO/HOWTO/LVS-HOWTO.arp_problem.html&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2553499412000874057?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2553499412000874057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/10/broadcast.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2553499412000874057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2553499412000874057'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/10/broadcast.html' title='broadcast'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-347518597870182481</id><published>2010-10-04T23:43:00.001-07:00</published><updated>2010-10-04T23:43:15.809-07:00</updated><title type='text'>route table</title><content type='html'>&amp;#24179;&amp;#26102;&amp;#22312;&amp;#20102;&amp;#35299;&amp;#31995;&amp;#32479;&amp;#30340;route&amp;#34920;&amp;#21644;&amp;#37197;&amp;#32622;&amp;#31995;&amp;#32479;&amp;#30340;route&amp;#34920;&amp;#26102;, &amp;#37117;&amp;#26159;&amp;#27604;&amp;#36739;&amp;#21916;&amp;#27426;&amp;#20351;&amp;#29992;route&amp;#36825;&amp;#20010;&amp;#21629;&amp;#20196;&amp;#30340;. &amp;#20294;&amp;#26159;, &amp;#26412;&amp;#20154;&amp;#24863;&amp;#35273;&amp;#21040;&amp;#27492;&amp;#21629;&amp;#20196;&amp;#36755;&amp;#20986;&amp;#30340;&amp;#32080;&amp;#26524;&amp;#19982;&amp;#19968;&amp;#20123;&amp;#35762;&amp;#35299;&amp;#31995;&amp;#32479;&amp;#32593;&amp;#32476;&amp;#30340;&amp;#36164;&amp;#26009;&amp;#23545;&amp;#19981;&amp;#19978;&amp;#21495;&amp;#30340;, &amp;#20363;&amp;#22914;:&lt;br&gt;&lt;div id="yaqu" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_511cnnfmq9w_b" style="height:502px;width:296px"&gt;&lt;/div&gt;&lt;br&gt;&amp;#22312;Routing Decision&amp;#22788;&amp;#23601;&amp;#21644;route&amp;#21629;&amp;#20196;&amp;#30340;&amp;#36755;&amp;#20986;&amp;#32080;&amp;#26524;&amp;#23545;&amp;#19981;&amp;#19978;&amp;#21495;:&lt;br&gt;&lt;font style="background-color:#93c47d"&gt;jessinio@jessinio-laptop:~$ route -n&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;Kernel IP routing table&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;Destination&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Gateway&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Genmask&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Flags Metric Ref&amp;nbsp;&amp;nbsp;&amp;nbsp; Use Iface&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;192.168.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 255.255.255.0&amp;nbsp;&amp;nbsp; U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 wlan0&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;169.254.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 255.255.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; U&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1000&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 wlan0&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;0.0.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 192.168.0.1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0.0.0.0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UG&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0 wlan0&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#32080;&amp;#26524;&amp;#24456;&amp;#26126;&amp;#26174;, route&amp;#36755;&amp;#20986;&amp;#30340;&amp;#32080;&amp;#26524;&amp;#21482;&amp;#26159;&amp;#31995;&amp;#32479;&amp;#21457;&amp;#21521;&amp;#22806;&amp;#38754;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#30340;routing, &amp;#27809;&amp;#26377;&amp;#38472;&amp;#36848;&amp;#25968;&amp;#25454;&amp;#21253;&amp;#36827;&amp;#20837;&amp;#31995;&amp;#32479;&amp;#30340;routing.&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#31181;&amp;#24863;&amp;#35273;&amp;#24453;&amp;#32493;&amp;#20102;&amp;#24456;&amp;#20037;&amp;#19968;&amp;#27573;&amp;#26102;&amp;#38388;. &amp;#20170;&amp;#22825;&amp;#30475;&amp;#21040;&amp;#36825;&amp;#26679;&amp;#19968;&amp;#27573;&amp;#35805;:&lt;br&gt;&lt;div style="margin-left:40px"&gt;Linux has a different approach for routing than other UNIX. The way things are implemented on Linux is more flexible and powerful than traditional ways. Legacy utilities such as &lt;font face="Courier New"&gt;ifconfig&lt;/font&gt; and &lt;font face="Courier New"&gt;route&lt;/font&gt; are still valid, &lt;b style="color:#ff0000"&gt;but incomplete&lt;/b&gt;. This is because they do not give access to the advanced routing layer present on Linux. The utility &lt;font face="Courier New"&gt;ip&lt;/font&gt; (part of &lt;font face="Courier New"&gt;iproute2&lt;/font&gt;) is the current tool for networking related stuff under Linux. This tool will be the focus of this section. &lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#25991;&amp;#23383;&amp;#20013;&amp;#25552;&amp;#21040;&amp;#20102;,route&amp;#21629;&amp;#20196;&amp;#24471;&amp;#21040;&amp;#30340;&amp;#20854;&amp;#23454;&amp;#26159;&amp;#19981;&amp;#23436;&amp;#20840;&amp;#30340;&amp;#25968;&amp;#25454;. &amp;#22312;Linux&amp;#19979;, &amp;#26368;&amp;#26412;&amp;#22320;&amp;#21270;&amp;#30340;&amp;#24212;&amp;#35813;&amp;#26159;ip&amp;#21629;&amp;#20196;.&lt;br&gt;google&amp;#25214;&amp;#21040;&amp;#19968;&amp;#20221;&amp;#24456;&amp;#32769;&amp;#30340;&amp;#25991;&amp;#26723;&amp;#65306; http://linux-ip.net/html/routing-tables.html &amp;#19978;&amp;#38754;&amp;#20889;&amp;#24471;&amp;#24456;&amp;#28165;&amp;#26970;&amp;#20102;, &amp;#22914;&amp;#19979;&amp;#19968;&amp;#23567;&amp;#27573;&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;The routing table manipulated by the conventional &lt;b&gt;route&lt;/b&gt; command is the &lt;font face="Courier New"&gt;main&lt;/font&gt; routing table. Additionally, the use of both &lt;b&gt;ip address&lt;/b&gt; and &lt;b&gt;ifconfig&lt;/b&gt; will cause the kernel to alter the local routing table (and usually the main routing table). For further documentation on how to manipulate the other routing tables, see the command description of &lt;b&gt;ip route&lt;/b&gt;. &lt;br&gt;&lt;/div&gt;route&amp;#21629;&amp;#20196;&amp;#24471;&amp;#21040;&amp;#21644;&amp;#35774;&amp;#32622;&amp;#30340;&amp;#20165;&amp;#20165;&amp;#26159;&amp;#20912;&amp;#23665;&amp;#19968;&amp;#35282;&amp;#12290;&lt;br&gt;&lt;br&gt;iproute2&amp;#24037;&amp;#20855;&amp;#38598;&amp;#25163;&amp;#20876;&amp;#65306;http://www.policyrouting.org/iproute2.doc.html&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-347518597870182481?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/347518597870182481/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/10/route-table.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/347518597870182481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/347518597870182481'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/10/route-table.html' title='route table'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3618905128105339430</id><published>2010-09-11T23:43:00.001-07:00</published><updated>2010-09-11T23:43:45.400-07:00</updated><title type='text'>block size</title><content type='html'>&amp;#22810;&amp;#22788;&amp;#37117;&amp;#23384;&amp;#22312;block size&amp;#65292; &amp;#27010;&amp;#24565;&amp;#21516;&amp;#21517;&amp;#20294;&amp;#26159;&amp;#24847;&amp;#20041;&amp;#19981;&amp;#21516;&amp;#65292; &amp;#30456;&amp;#24403;&amp;#36855;&amp;#24785;&lt;br&gt;&amp;#36825;&amp;#21733;&amp;#20204;&amp;#23601;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#34987;&amp;#36855;&amp;#24785;&amp;#30340;&amp;#20154;&amp;#65306; http://www.linuxforums.org/forum/misc/5654-linux-disk-block-size-help-please.html&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;URL&amp;#21015;&amp;#20986;&amp;#20102;&amp;#22914;&amp;#19979;&amp;#20960;&amp;#31181;block:&lt;br&gt; 1. Hardware block size, &amp;quot;sector size&amp;quot;&lt;br&gt; 2. Filesystem block size, &amp;quot;block size&amp;quot;&lt;br&gt; 3. Kernel buffer cache block size, &amp;quot;block size&amp;quot;&lt;br&gt; 4. Partition table block size, &amp;quot;cylinder size&amp;quot;&lt;br&gt;&lt;br&gt;&amp;#25105;&amp;#23545;fdisk&amp;#25171;&amp;#21360;&amp;#30340;blocks&amp;#19968;&amp;#26639;&amp;#24456;&amp;#19981;&amp;#35299;. &amp;#38656;&amp;#35201;dig&amp;#19968;&amp;#19979;.&lt;br&gt;&amp;#20808;&amp;#26469;&amp;#30475;&amp;#30475;fdisk&amp;#25171;&amp;#21360;&amp;#20986;&amp;#26469;&amp;#30340;block&amp;#65306;&lt;br&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;jessinio@jessinio-laptop:/ $ sudo &lt;/font&gt;&lt;b style="background-color:#b6d7a8;color:#ff0000"&gt;fdisk -l&lt;/b&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk /dev/sda: 250.1 GB, 250059350016 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;255 heads, 63 sectors/track, 30401 cylinders&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk identifier: 0x00038329&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; Device Boot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blocks&amp;nbsp;&amp;nbsp; Id&amp;nbsp; System&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda1&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;b style="background-color:#b6d7a8"&gt;&lt;font color="#0000ff"&gt;803218&lt;/font&gt;&lt;/b&gt;&lt;font style="background-color:#b6d7a8"&gt;+&amp;nbsp; 83&amp;nbsp; Linux&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30401&amp;nbsp;&amp;nbsp; 243392782+&amp;nbsp; 8e&amp;nbsp; Linux LVM&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;b&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20869;&amp;#23481;&amp;#21644;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#26159;&amp;#19968;&amp;#33268;&amp;#30340;&amp;#65306;&lt;/b&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;jessinio@jessinio-laptop:/media/82d236f2-3592-4040-801c-3c2049ddfb95$ sudo &lt;/font&gt;&lt;b style="background-color:#b6d7a8;color:#ff0000"&gt;fdisk -b 512 -l&lt;/b&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Warning: the -b (set sector size) option should be used with one specified device&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk /dev/sda: 250.1 GB, 250059350016 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;255 heads, 63 sectors/track, 30401 cylinders&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Units = cylinders of 16065 * 512 = 8225280 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk identifier: 0x00038329&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; Device Boot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blocks&amp;nbsp;&amp;nbsp; Id&amp;nbsp; System&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda1&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;b style="background-color:#b6d7a8"&gt;&lt;font color="#0000ff"&gt;803218&lt;/font&gt;&lt;/b&gt;&lt;font style="background-color:#b6d7a8"&gt;+&amp;nbsp; 83&amp;nbsp; Linux&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30401&amp;nbsp;&amp;nbsp; 243392782+&amp;nbsp; 8e&amp;nbsp; Linux LVM&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ffe599"&gt;&amp;#20294;&amp;#26159;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#23601;&amp;#27604;&amp;#36739;&amp;#22855;&amp;#24618;&amp;#20102;&amp;#65306;&lt;/b&gt;&lt;br&gt;jessinio@jessinio-laptop:/media/82d236f2-3592-4040-801c-3c2049ddfb95$ sudo &lt;b style="color:#ff0000"&gt;fdisk -b 1024 -l&lt;/b&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Warning: the -b (set sector size) option should be used with one specified device&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk /dev/sda: 250.1 GB, 250059350016 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;255 heads, 63 sectors/track, 15200 cylinders&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Units = cylinders of 16065 * 1024 = 16450560 bytes&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;Disk identifier: 0x00038329&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; Device Boot&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Start&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; End&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blocks&amp;nbsp;&amp;nbsp; Id&amp;nbsp; System&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda1&amp;nbsp;&amp;nbsp; *&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 100&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;b style="background-color:#b6d7a8"&gt;&lt;font color="#0000ff"&gt;1606437&lt;/font&gt;&lt;/b&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; 83&amp;nbsp; Linux&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;/dev/sda2&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 101&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 30401&amp;nbsp;&amp;nbsp; 486785565&amp;nbsp;&amp;nbsp; 8e&amp;nbsp; Linux LVM&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#25351;&amp;#23450;&amp;#26356;&amp;#22823;&amp;#30340;&amp;#30828;&amp;#20214;sector size&amp;#21453;&amp;#32780;block&amp;#22686;&amp;#21152;, &amp;#36825;&amp;#26159;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#21602;?&amp;#12290;&amp;#19979;&amp;#38754;&amp;#26159;fdisk&amp;#30340;&amp;#30456;&amp;#20851;&amp;#20195;&amp;#30721;&amp;#65306;&lt;br&gt;&lt;font style="background-color:#ffe599"&gt;sector_size&amp;#21464;&amp;#37327;&amp;#30340;&amp;#26469;&amp;#28304;&amp;#65306;&lt;/font&gt;&lt;br&gt;&amp;nbsp;759 static void&lt;br&gt;&amp;nbsp;760 get_sectorsize(int fd) {&lt;br&gt;&amp;nbsp;761 #if defined(BLKSSZGET)&lt;br&gt;&amp;nbsp;762&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (!&lt;b style="color:#ff0000"&gt;user_set_sector_size&lt;/b&gt; &amp;amp;&amp;amp;&amp;nbsp; &lt;br&gt;&amp;nbsp;763&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; linux_version_code() &amp;gt;= MAKE_VERSION(2,3,3)) {&lt;br&gt;&amp;nbsp;764&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int arg;&lt;br&gt;&amp;nbsp;765&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (&lt;b style="color:#ff0000"&gt;ioctl(fd, BLKSSZGET, &amp;amp;arg)&lt;/b&gt; == 0)&lt;br&gt;&amp;nbsp;766&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sector_size = arg;&lt;br&gt;&amp;nbsp;767&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (sector_size != DEFAULT_SECTOR_SIZE)&lt;br&gt;&amp;nbsp;768&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(_(&amp;quot;Note: sector size is %d (not %d)\n&amp;quot;),&lt;br&gt;&amp;nbsp;769&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sector_size, DEFAULT_SECTOR_SIZE);&lt;br&gt;&amp;nbsp;770&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;771 #else&lt;br&gt;&amp;nbsp;772&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; /* maybe the user specified it; and otherwise we still&lt;br&gt;&amp;nbsp;773&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; have the &lt;b style="color:#ff0000"&gt;DEFAULT_SECTOR_SIZE&lt;/b&gt; default */&lt;br&gt;&amp;nbsp;774 #endif&lt;br&gt;&amp;nbsp;775 }&lt;br&gt;&lt;b style="color:#ff0000"&gt;DEFAULT_SECTOR_SIZE&lt;/b&gt; &amp;#22312;fdisk.h&amp;#20013;&amp;#23450;&amp;#20041;&amp;#26159;&lt;br&gt;#define DEFAULT_SECTOR_SIZE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 512&lt;br&gt;&lt;br&gt;&amp;#25110;&amp;#32773;&amp;#26159;&amp;#29992;&amp;#25143;&amp;#25351;&amp;#23450;&amp;#30340;&lt;font style="background-color:#b6d7a8"&gt;user_set_sector_size&lt;/font&gt;&amp;#65306;&lt;b style="color:#ff0000"&gt;sector_size = atoi(optarg);&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#ffe599"&gt;&amp;#25171;&amp;#21360;&amp;#26102;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#26159;&amp;#65306;&lt;/font&gt;&lt;br&gt;1731&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int psects = get_nr_sects(p);&lt;br&gt;1732&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int &lt;b style="color:#ff0000"&gt;pblocks = psects;&lt;/b&gt;&lt;br&gt;1733&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; unsigned int podd = 0;&lt;br&gt;1734 &lt;br&gt;1735&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b style="background-color:#a2c4c9"&gt; if (sector_size &amp;lt; 1024)&lt;/b&gt; {&lt;br&gt;1736&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pblocks /= (1024 / sector_size);&lt;br&gt;1737&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; podd = psects % (1024 / sector_size);&lt;br&gt;1738&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;1739&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b style="background-color:#a2c4c9"&gt; if (sector_size &amp;gt; 1024)&lt;/b&gt;&lt;br&gt;1740&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pblocks *= (sector_size / 1024);&lt;br&gt;1741&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&lt;br&gt;1742&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;%s&amp;nbsp; %c %11lu %11lu %11lu%c&amp;nbsp; %2x&amp;nbsp; %s\n&amp;quot;,&lt;br&gt;1743&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; partname(disk_device, i+1, w+2),&lt;br&gt;1744 /* boot flag */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; !p-&amp;gt;boot_ind ? &amp;#39; &amp;#39; : p-&amp;gt;boot_ind == ACTIVE_FLAG&lt;br&gt;1745&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ? &amp;#39;*&amp;#39; : &amp;#39;?&amp;#39;,&lt;br&gt;1746 /* start */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (unsigned long) cround(get_partition_start(pe)),&lt;br&gt;1747 /* end */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (unsigned long) cround(get_partition_start(pe) + psects&lt;br&gt;1748&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; - (psects ? 1 : 0)),&lt;br&gt;1749 /* odd flag on end */&amp;nbsp;&amp;nbsp; (unsigned long) pblocks, podd ? &amp;#39;+&amp;#39; : &amp;#39; &amp;#39;,&lt;br&gt;1750 /* type id */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;sys_ind,&lt;br&gt;1751 /* type name */&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (type = partition_type(p-&amp;gt;sys_ind)) ?&lt;br&gt;1752&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; type : _(&amp;quot;Unknown&amp;quot;));&lt;br&gt;1753&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; check_consistency(p, i);&lt;br&gt;&lt;br&gt;1. &amp;#24403;sector_size&amp;#21018;&amp;#22909;&amp;#31561;&amp;#20110;1024&amp;#26102;&amp;#65292; &amp;#25171;&amp;#21360;&amp;#20986;&amp;#30340;&amp;#27491;&amp;#22909;&amp;#26159;sector&amp;#30340;&amp;#25968;&amp;#30446;&amp;#12290;&amp;#20063;&amp;#26159;partition&amp;#30340;&amp;#22823;&amp;#23567;(&amp;#21516;size&amp;#27010;&amp;#24565;)&lt;br&gt;2. &amp;#24403;sector_size&amp;#19981;&amp;#31561;&amp;#20110;1024&amp;#26102;&amp;#65292;&amp;#25226;sector&amp;#25968;&amp;#30446;&amp;#21644;sector_size&amp;#32467;&amp;#21512;&amp;#36215;&amp;#26469;&amp;#25563;&amp;#31639;&amp;#25104;&amp;#22823;&amp;#23567;(&amp;#21516;size&amp;#27010;&amp;#24565;)&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#35265;&amp;#65292; fdisk&amp;#25171;&amp;#21360;&amp;#30340;Blocks&amp;#19968;&amp;#26639;&amp;#20854;&amp;#23454;&amp;#26159;partition&amp;#30340;&amp;#22823;&amp;#23567;&amp;#12290;&amp;#19979;&amp;#38754;&amp;#27979;&amp;#35797;&amp;#19968;&amp;#19979;&amp;#65306;&lt;br&gt;&lt;br&gt;$ sudo mount /dev/sda1 /media/disk/&lt;br&gt;$ df /media/disk/&lt;br&gt;Filesystem&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1K-blocks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Used Available Use% Mounted on&lt;br&gt;/dev/sda1&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color:#ff0000"&gt;790556&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 48176&amp;nbsp;&amp;nbsp;&amp;nbsp; 702220&amp;nbsp;&amp;nbsp; 7% /media/disk&lt;br&gt;&lt;b style="color:#ff0000"&gt;790556&lt;/b&gt; &amp;#26159;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;&amp;#24635;&amp;#22823;&amp;#23567;&amp;#12290;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&lt;b style="color:#ff0000"&gt;fdisk -b 1024 -l&lt;/b&gt; &amp;#21629;&amp;#20196;&amp;#24471;&amp;#21040;&amp;#30340;&lt;b&gt;&lt;font color="#0000ff"&gt;1606437&lt;/font&gt;&lt;/b&gt;&amp;#26159;sector&amp;#30340;&amp;#25968;&amp;#30446;&amp;#12290;&amp;#36825;&amp;#26679;&amp;#35745;&amp;#31639;&amp;#65306;&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;1606437&lt;/font&gt;&lt;/b&gt; * 512 / 1024 =803218 &amp;#26159;&amp;#32422;&amp;#31561;&amp;#20110;&lt;b style="color:#ff0000"&gt;790556&lt;/b&gt; &amp;#30340;&amp;#12290;partition&amp;#30340;&amp;#22823;&amp;#23567;&amp;#26159;&amp;#27604;file system&amp;#22823;&amp;#26159;&amp;#22240;&amp;#20026;file system&amp;#38656;&amp;#35201;&amp;#23384;&amp;#25918;&amp;#19968;&amp;#20123;&amp;#20449;&amp;#24687;.&lt;br&gt;&lt;h3 style="background-color:#b6d7a8"&gt;&amp;#24635;&lt;/h3&gt;1. &amp;#35201;&amp;#24819;&amp;#24471;&amp;#21040;&amp;#19968;&amp;#20010;partition&amp;#21344;&amp;#26377;&amp;#29992;&amp;#22810;&amp;#23569;&amp;#20010;sector&amp;#30340;&amp;#35805;, &amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;fdisk -b 1024&amp;#36825;&amp;#31181;&amp;#26041;&amp;#24335;&amp;#24471;&amp;#21040;&lt;br&gt;2. &amp;#19981;&amp;#21152;-b&amp;#21442;&amp;#25968;&amp;#30340;fdisk&amp;#21629;&amp;#20196;&amp;#25171;&amp;#21360;&amp;#30340;Blocks&amp;#19968;&amp;#26639;&amp;#20854;&amp;#23454;&amp;#26159;&amp;#34920;&amp;#31034;partition&amp;#30340;&amp;#22823;&amp;#23567;(&amp;#20197;K&amp;#20026;&amp;#21333;&amp;#20301;)&lt;br&gt;3. &amp;#36824;&amp;#27809;&amp;#26377;&amp;#33021;&amp;#21147;&amp;#25214;&amp;#20986;Kernel buffer cache block size, &amp;quot;block size&amp;quot; &amp;#36825;&amp;#19968;&amp;#26465;&amp;#30340;&amp;#23454;&amp;#38469;&amp;#20195;&amp;#30721;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3618905128105339430?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3618905128105339430/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/09/block-size.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3618905128105339430'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3618905128105339430'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/09/block-size.html' title='block size'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-8431399293414833884</id><published>2010-09-08T22:23:00.001-07:00</published><updated>2010-09-08T22:23:50.377-07:00</updated><title type='text'>pkg-config</title><content type='html'>&amp;#24863;&amp;#35273;centOS&amp;#19978;&amp;#30340;fuse&amp;#29256;&amp;#26412;&amp;#22826;&amp;#20302;&amp;#65292; &amp;#36824;&amp;#26159;&amp;#20174;&amp;#28304;&amp;#20195;&amp;#30721;&amp;#23433;&amp;#35013;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#31616;&amp;#21333;&amp;#32534;&amp;#35793;&amp;#21518;&amp;#65306;&lt;br&gt;./configure --prefix=/usr/local/fuse&lt;br&gt;&lt;br&gt;fuse-python-binding&amp;#23601;&amp;#26080;&amp;#27861;&amp;#23433;&amp;#35013;&amp;#12290;&amp;#38382;&amp;#39064;&amp;#26159;fuse-python-binding&amp;#30340;setup.py&amp;#38656;&amp;#35201;&amp;#20351;&amp;#29992;pkg-config&amp;#21462;&amp;#24471;&amp;#32534;&amp;#35793;&amp;#21442;&amp;#25968;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;nbsp;pkg-config --list-all&amp;nbsp; |grep fuse&lt;br&gt;&amp;#26080;&amp;#27861;&amp;#25214;&amp;#21040;pkg-config&amp;#38656;&amp;#35201;&amp;#30340;*.pc metainfornation&amp;#25991;&amp;#20214;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#25163;&amp;#24037;&amp;#22686;&amp;#21152;&amp;#65306;&lt;br&gt;&lt;br&gt;$ PKG_CONFIG_PATH=/usr/local/fuse/lib/pkgconfig/ pkg-config --list-all |grep fuse&lt;br&gt;fuse&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fuse - Filesystem in Userspace&lt;br&gt;&lt;br&gt;&amp;#25152;&amp;#20197;&amp;#65292; &amp;#19979;&amp;#38754;&amp;#30340;&amp;#26041;&amp;#27861;&amp;#21487;&amp;#20197;&amp;#23433;&amp;#35013;&amp;#65306;&lt;br&gt;$ sudo PKG_CONFIG_PATH=/usr/local/fuse/lib/pkgconfig/ python setup.py install&lt;br&gt;&lt;br&gt;[jessinio@niowork site-packages]$ /usr/local/python2.6/bin/python -c &amp;quot;import fuse&amp;quot;&lt;br&gt;Traceback (most recent call last):&lt;br&gt;&amp;nbsp; File &amp;quot;&amp;lt;string&amp;gt;&amp;quot;, line 1, in &amp;lt;module&amp;gt;&lt;br&gt;&amp;nbsp; File &amp;quot;fuse.py&amp;quot;, line 27, in &amp;lt;module&amp;gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from fuseparts._fuse import main, FuseGetContext, FuseInvalidate&lt;br&gt;ImportError: libfuse.so.2: cannot open shared object file: No such file or directory&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#38656;&amp;#35201;&amp;#22686;&amp;#21152;lib&amp;#36335;&amp;#24452;&amp;#65306;&lt;br&gt;$ sudo sh -c &amp;quot;echo /usr/local/fuse/lib &amp;gt;&amp;gt; /etc/ld.so.conf.d/fuse.conf &amp;quot;&lt;br&gt;$ sudo ldconfig&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-8431399293414833884?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/8431399293414833884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/09/pkg-config.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8431399293414833884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8431399293414833884'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/09/pkg-config.html' title='pkg-config'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7862515111446299450</id><published>2010-09-04T01:37:00.001-07:00</published><updated>2010-09-04T03:18:22.442-07:00</updated><title type='text'>prefork服务器方式</title><content type='html'>WEB&amp;#26381;&amp;#21153;&amp;#22120;&amp;#19968;&amp;#33324;&amp;#37117;&amp;#26377;&amp;#20004;&amp;#31181;&amp;#27169;&amp;#24335;&amp;#22788;&amp;#29702;&amp;#21160;&amp;#24577;&amp;#26381;&amp;#21153;:&lt;br&gt;1. prefork&lt;br&gt;2. thread&lt;br&gt;&lt;br&gt;&amp;#19968;&amp;#31181;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#22810;&amp;#36827;&amp;#31243;, &amp;#21478;&amp;#19968;&amp;#31181;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#22810;&amp;#32447;&amp;#31243;.&amp;nbsp; &amp;#23427;&amp;#20204;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#30340;&amp;#23454;&amp;#29616;&amp;#26041;&amp;#24335;&amp;#33258;&amp;#24049;&amp;#20854;&amp;#23454;&amp;#24182;&amp;#19981;&amp;#28165;&amp;#26970;.&lt;br&gt;&amp;#26368;&amp;#36817;&amp;#20844;&amp;#21496;&amp;#30340;python WEB&amp;#26381;&amp;#21153;&amp;#20351;&amp;#29992;&amp;#36739;&amp;#22810;&amp;#30340;&amp;#20869;&amp;#23384;. &amp;#20026;&amp;#20102;&amp;#28165;&amp;#26970;&amp;#20854;&amp;#20013;&amp;#30340;&amp;#38382;&amp;#39064;. &amp;#38656;&amp;#35201;&amp;#23398;&amp;#20064;flup(django&amp;#38656;&amp;#35201;&amp;#27492;&amp;#24211;)&amp;#20195;&amp;#30721;. (&amp;nbsp; &amp;#20154;&amp;#23478;&amp;#20889;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#23454;&amp;#22312;&amp;#22909;&amp;#30475; )&lt;br&gt;&lt;br&gt;&amp;#24456;&amp;#22810;&amp;#36719;&amp;#20214;&amp;#37117;&amp;#26377;prefork&amp;#26041;&amp;#24335;, &amp;#19979;&amp;#38754;&amp;#26159;prefork&amp;#27169;&amp;#22411;:&lt;br&gt;&lt;div id="ghxf" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_496jkvdzvcp_b" style="height:145.527px;width:648px"&gt;&lt;/div&gt;&lt;br&gt;&amp;#27599;&amp;#20010;nginx&amp;#23376;&amp;#36827;&amp;#31243;&amp;#37117;&amp;#20998;&amp;#21035;&amp;#35843;&amp;#29992;accept&amp;#24471;&amp;#21040;&amp;#29992;&amp;#25143;&amp;#21457;&amp;#26469;&amp;#30340;80&amp;#31471;&amp;#21475;&amp;#35831;&amp;#27714;.&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#20043;&amp;#25152;&amp;#20197;&amp;#27599;&amp;#20010;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#37117;&amp;#21487;&amp;#20197;&amp;#35843;&amp;#29992;accept&amp;#24471;&amp;#21040;&amp;#21516;&amp;#19968;&amp;#20010;socket&amp;#30340;&amp;#35831;&amp;#27714;, &amp;#26159;&amp;#22240;&amp;#20026;fork&amp;#20986;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#30340;file descriptor&amp;#26159;&amp;#25351;&amp;#21521;&amp;#21516;&amp;#19968;&amp;#20010;&amp;#23454;&amp;#20307;.&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#26679;&amp;#23454;&amp;#29616;&amp;#20102;&amp;#22810;&amp;#36827;&amp;#31243;&amp;#31455;&amp;#20105;&amp;#24471;&amp;#21040;socket&amp;#35831;&amp;#27714;.&lt;br&gt;&lt;br&gt;&amp;#27599;&amp;#20010;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#21448;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;epoll, &amp;#32447;&amp;#31243;&amp;#31561;&amp;#26041;&amp;#24335;&amp;#24182;&amp;#21457;&amp;#22788;&amp;#29702;&amp;#20247;&amp;#22810;&amp;#26469;&amp;#33258;80&amp;#31471;&amp;#21475;&amp;#30340;&amp;#35831;&amp;#27714;. fast cgi server&amp;#20063;&amp;#26159;&amp;#31867;&amp;#20284;&amp;#30340;&amp;#26041;&amp;#27861;.&lt;br&gt;nginx&amp;#19982;fast cgi server&amp;#20043;&amp;#38388;&amp;#20351;&amp;#29992;socket&amp;#36890;&amp;#20449;, &amp;#20351;&amp;#29992;fast cgi&amp;#21327;&amp;#35758;.&lt;br&gt;&lt;br&gt;&lt;div id="uw.v" style="text-align:left"&gt;&lt;div id="d4hu" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_499gqzw27cs_b" style="height:76.8963px;width:648px"&gt;&lt;/div&gt;&lt;/div&gt;&lt;br&gt;&amp;#27599;&amp;#20010;flup work&amp;#26576;&amp;#19968;&amp;#26102;&amp;#21051;&amp;#21482;&amp;#26381;&amp;#21153;&amp;#19968;&amp;#20010;&amp;#39029;&amp;#38754;&amp;#35831;&amp;#27714;. &amp;#23436;&amp;#25104;&amp;#35831;&amp;#27714;&amp;#21518;&amp;#21487;&amp;#20197;&amp;#37325;&amp;#26032;&amp;#25509;&amp;#21463;&amp;#35831;&amp;#27714;.&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;prefork&amp;#27169;&amp;#22411;&amp;#30340;&amp;#26041;&amp;#24335;&amp;#12290; &amp;#25152;&amp;#20197;&amp;#22312;PreforkServer&amp;#31867;&amp;#20013;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#20027;&amp;#20307;&amp;#26159;&amp;#19968;&amp;#20010;loop:&lt;br&gt;&lt;br&gt;119&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Main loop.&lt;br&gt;120&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while self._keepGoing:&lt;br&gt;121&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Maintain minimum number of children.&lt;br&gt;122&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while len(self._children) &amp;lt; self._maxSpare:&lt;br&gt;123&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not self._spawnChild(sock): break&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;&amp;#65292; &amp;#29238;&amp;#36827;&amp;#31243;&amp;#26159;&amp;#27704;&amp;#36828;&amp;#26399;&amp;#24453;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#25968;&amp;#30446;&amp;#20026;&amp;#19968;&amp;#20010;&amp;#25968;&amp;#20540;&amp;#30340;&amp;#12290;&amp;#36825;&amp;#20010;&amp;#25968;&amp;#20540;&amp;#20026;maxSpare&lt;br&gt;&amp;#31895;&amp;#31895;&amp;#30475;&amp;#19978;&amp;#21435;&amp;#65292; &amp;#26377;&amp;#20123;&amp;#37326;&amp;#12290;&amp;#20294;&amp;#26159;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#26159;&amp;#26377;&amp;#22238;&amp;#25910;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#31574;&amp;#30053;&amp;#30340;&amp;#65292; &amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;&lt;br&gt;169&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # See who and how many children are available.&lt;br&gt;170&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; availList = filter(lambda x: x[1][&amp;#39;avail&amp;#39;],&lt;br&gt;self._children.items())&lt;br&gt;171&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; avail = len(availList)&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#65292; &amp;#29238;&amp;#36827;&amp;#31243;&amp;#20250;&amp;#19968;&amp;#30452;&amp;#25910;&amp;#38598;&amp;#21487;&amp;#29992;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#12290; &amp;#25152;&amp;#35859;&amp;#21487;&amp;#29992;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#22312;&amp;#24037;&amp;#20316;&lt;br&gt;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#65292; &amp;#21487;&amp;#20197;&amp;#20174;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#20013;&amp;#30475;&amp;#20986;, &amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;370&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Notify parent we&amp;#39;re no longer available.&lt;br&gt;371&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self._notifyParent(parent, &amp;#39;\x00&amp;#39;)&lt;br&gt;372&lt;br&gt;373&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Do the job.&lt;br&gt;374&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self._jobClass(clientSock, addr, *self._jobArgs).run()&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#26159;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#35843;&amp;#29992;jobClass.run&amp;#20043;&amp;#21069;&amp;#65292; &amp;#36890;&amp;#30693;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#33258;&amp;#24049;&amp;#26159; no longer&lt;br&gt;available&amp;#30340;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#32500;&amp;#25252;&amp;#30528;&amp;ldquo;&amp;#21487;&amp;#29992;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;ldquo;&amp;#25968;&amp;#30446;&amp;#26159;&amp;#20026;&amp;#20102;&amp;#21487;&amp;#20197;&amp;#20102;&amp;#35299;&amp;#36127;&amp;#36733;&amp;#24773;&amp;#20917;&amp;#65292; &amp;#21028;&amp;#26029;&amp;#26159;&amp;#21542;&amp;#38656;&amp;#35201;&amp;#20135;&amp;#29983;&lt;br&gt;&amp;#26356;&amp;#22810;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#65292; &amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;172&lt;br&gt;173&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if avail &amp;lt; self._minSpare:&lt;br&gt;174&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Need to spawn more children.&lt;br&gt;175&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while avail &amp;lt; self._minSpare and \&lt;br&gt;176&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; len(self._children) &amp;lt; self._maxChildren:&lt;br&gt;177&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not self._spawnChild(sock): break&lt;br&gt;178&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; avail += 1&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#20351;&amp;#29992;&amp;#20102;&amp;#20004;&amp;#20010;&amp;#25968;&amp;#25454;&amp;#65306; minSpare&amp;#21644;maxChildren&amp;#12290;&lt;br&gt;&lt;br&gt;minSpare&amp;#26159;&amp;#34920;&amp;#31034;&amp;#26368;&amp;#23569;&amp;ldquo;&amp;#21487;&amp;#29992;&amp;#23376;&amp;#36827;&amp;#31243;&amp;ldquo;&amp;#25968;&lt;br&gt;maxChildren&amp;#26159;&amp;#34920;&amp;#31034;&amp;#26368;&amp;#22823;&amp;ldquo;&amp;#23376;&amp;#36827;&amp;#31243;&amp;rdquo;&amp;#25968;&amp;#65292; &amp;#26159;&amp;#31354;&amp;#38386;&amp;#19982;&amp;#24037;&amp;#20316;&amp;#30340;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#24635;&amp;#25968;&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#26524;&amp;ldquo;&amp;#21487;&amp;#29992;&amp;#23376;&amp;#36827;&amp;#31243;&amp;rdquo;&amp;#25968;&amp;#36824;&amp;#21097;&amp;#19968;&amp;#23450;&amp;#25968;&amp;#25454;&amp;#65292;&amp;#20250;&amp;#34987;&amp;#22238;&amp;#25910;&amp;#65292; &amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;&lt;br&gt;179&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif avail &amp;gt; self._maxSpare:&lt;br&gt;180&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Too many spares, kill off the extras.&lt;br&gt;181&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pids = [x[0] for x in availList]&lt;br&gt;182&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pids.sort()&lt;br&gt;183&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pids = pids[self._maxSpare:]&lt;br&gt;184&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for pid in pids:&lt;br&gt;185&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d = self._children[pid]&lt;br&gt;186&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d[&amp;#39;file&amp;#39;].close()&lt;br&gt;187&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d[&amp;#39;file&amp;#39;] = None&lt;br&gt;188&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; d[&amp;#39;avail&amp;#39;] = False&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65292; fast cgi&amp;#22312;&amp;#21551;&amp;#21160;&amp;#26102;&amp;#30340;&amp;#20351;&amp;#29992;&amp;#21040;&amp;#30340;&amp;#19977;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#30340;&amp;#20316;&amp;#29992;&amp;#24212;&amp;#35813;&amp;#26159;&amp;#65306;&lt;br&gt;minspare: &amp;#26368;&amp;#23567;&amp;ldquo;&amp;#31354;&amp;#38386;&amp;#36827;&amp;#31243;&amp;#25968;&amp;ldquo;&lt;br&gt;maxspare: &amp;#24120;&amp;#35268;&amp;#36827;&amp;#31243;&amp;#25968;&amp;#65292;&amp;#21363;fast cgi&amp;#21551;&amp;#21160;&amp;#21518;&amp;#65292; fastcgi&amp;#36827;&amp;#31243;&amp;#25968;&amp;#26159;&amp;#22823;&amp;#20110;&amp;#31561;&amp;#20110;&amp;#27492;&amp;#20540;&lt;br&gt;maxChildren: &amp;#26368;&amp;#22823;&amp;#36827;&amp;#31243;&amp;#25968;&amp;#65292; &amp;#27492;&amp;#20540;&amp;#20027;&amp;#35201;&amp;#26159;&amp;#29992;&amp;#20110;&amp;#38450;&amp;#27490;&amp;#20869;&amp;#23384;&amp;#34987;&amp;#20351;&amp;#29992;&amp;#23436;&amp;#30340;&amp;#12290;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7862515111446299450?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7862515111446299450/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/09/prefork.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7862515111446299450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7862515111446299450'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/09/prefork.html' title='prefork服务器方式'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5792305926922095883</id><published>2010-09-03T21:55:00.001-07:00</published><updated>2010-09-03T21:59:54.606-07:00</updated><title type='text'>父类方法使用子类的方法与数据</title><content type='html'>&amp;#23545;OO&amp;#20854;&amp;#23454;&amp;#26159;&amp;#19981;&amp;#25026;, &amp;#21482;&amp;#26159;&amp;#20250;&amp;#19968;&amp;#20010;class( &amp;#27169;&amp;#24335;&amp;#35828;&amp;#30333;&amp;#20102;&amp;#19981;&amp;#20250;. &amp;#25509;&amp;#21475;&amp;#26159;&amp;#23398;&amp;#20102;go&amp;#35821;&amp;#35328;&amp;#25165;&amp;#30693;&amp;#36947;&amp;#26159;&amp;#20160;&amp;#20040;. (-_-)! )&lt;br&gt;&lt;br&gt;&amp;#20170;&amp;#22825;&amp;#22312;&amp;#30475;flup&amp;#39033;&amp;#30446;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#26102;, &amp;#26377;&amp;#19968;&amp;#27573;&amp;#21457;&amp;#30721;&amp;#30475;&amp;#19981;&amp;#25026;. &amp;#20854;&amp;#23454;&amp;#26159;&amp;#33258;&amp;#24049;&amp;#23545;OO&amp;#30340;&amp;#19981;&amp;#25026;:&lt;br&gt;&amp;nbsp;&lt;br&gt;&amp;nbsp; 1 #coding:utf-8&lt;br&gt;&amp;nbsp; 2 &lt;br&gt;&amp;nbsp; 3 class Parent(object):&lt;br&gt;&amp;nbsp; 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self, name):&lt;br&gt;&amp;nbsp; 5&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self._name = &amp;quot;\t&amp;#29238;&amp;#31867;: %s&amp;quot; % name&lt;br&gt;&amp;nbsp; 6&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def whoami(self):&lt;br&gt;&amp;nbsp; 7&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print self._name&lt;br&gt;&amp;nbsp; 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#22312;&amp;#29238;&amp;#31867;&amp;#26041;&amp;#38754;&amp;#20013;&amp;#35843;&amp;#29992;&amp;#23376;&amp;#31867;&amp;#30340;&amp;#26041;&amp;#27861;:&amp;quot;&lt;br&gt;&amp;nbsp; 9&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self._print()&lt;br&gt;&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;12 class Child(Parent):&lt;br&gt;&amp;nbsp;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def __init__(self, name):&lt;br&gt;&amp;nbsp;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; self._nickname = &amp;quot;\t&amp;#23376;&amp;#31867;&amp;#65306;%s&amp;quot; % name&lt;br&gt;&amp;nbsp;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#ea9999"&gt;Parent.__init__(self, &amp;quot;&amp;#22823;&amp;#26126;&amp;quot;) &lt;/font&gt;&lt;br&gt;&amp;nbsp;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def _print(self):&lt;br&gt;&amp;nbsp;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print self._nickname&lt;br&gt;&amp;nbsp;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; def run(self):&lt;br&gt;&amp;nbsp;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # &amp;#19979;&amp;#38754;&amp;#30340;&amp;#20004;&amp;#31181;&amp;#35843;&amp;#29992;&amp;#26041;&amp;#27861;&amp;#26159;&amp;#19968;&amp;#26679;&amp;#30340;&lt;br&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#20351;&amp;#29992;Parent.method(self)&amp;#30340;&amp;#26041;&amp;#27861;&amp;#35843;&amp;#29992;&amp;#29238;&amp;#31867;&amp;#26041;&amp;#27861;&amp;quot;&lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#9fc5e8"&gt;Parent.whoami(self)&lt;/font&gt;&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#20351;&amp;#29992;self.method()&amp;#30340;&amp;#26041;&amp;#27861;&amp;#35843;&amp;#29992;&amp;#29238;&amp;#31867;&amp;#26041;&amp;#27861;&amp;quot;&lt;br&gt;&amp;nbsp;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#93c47d"&gt;self.whoami()&lt;/font&gt;&lt;br&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;29 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = Child(&amp;quot;&amp;#23567;&amp;#26126;&amp;quot;)&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c.run()&lt;br&gt;&lt;br&gt;&amp;#24179;&amp;#26102;&amp;#19968;&amp;#33324;&amp;#37117;&amp;#26159;&amp;#20351;&amp;#29992;&lt;font style="background-color:#93c47d"&gt;self.whoami()&lt;/font&gt;, &amp;#33258;&amp;#20026;&amp;#21457;&amp;#29238;&amp;#26041;&amp;#27861;&amp;#26080;&amp;#27861;&amp;#20351;&amp;#29992;&amp;#23376;&amp;#31867;&amp;#30340;&amp;#19996;&amp;#35199;. &amp;#20294;&amp;#26159;&amp;#22914;&amp;#26524;&amp;#20351;&amp;#29992;&lt;font style="background-color:#9fc5e8"&gt;Parent.whoami(self)&lt;/font&gt; &amp;#30340;&amp;#26041;&amp;#24335;, &amp;#23601;&amp;#20250;&amp;#26126;&amp;#30333;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#29702;&amp;#35299;&amp;#20854;&amp;#23454;&amp;#26159;&amp;#38169;&amp;#30340;.&lt;br&gt;&lt;br&gt;&amp;#22522;&amp;#26412;&amp;#38382;&amp;#39064;&amp;#26159;&amp;#33258;&amp;#24049;&amp;#27809;&amp;#26377;&amp;#23545;&amp;#20070;&amp;#20013;&amp;#30340;&lt;font style="background-color:#ea9999"&gt;Parent.__init__(self, &amp;quot;&amp;#22823;&amp;#26126;&amp;quot;)&lt;font style="background-color:#ffffff"&gt; &amp;#19968;&amp;#21477;&amp;#29702;&amp;#35299;&amp;#21040;&amp;#20301;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#21999;.... &amp;#33258;&amp;#24049;&amp;#30340;&amp;#27700;&amp;#24179;&amp;#22826;&amp;#24046;&amp;#20102;.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5792305926922095883?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5792305926922095883/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/09/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5792305926922095883'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5792305926922095883'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/09/blog-post.html' title='父类方法使用子类的方法与数据'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-344947972794119712</id><published>2010-08-15T22:55:00.001-07:00</published><updated>2010-08-15T22:55:15.797-07:00</updated><title type='text'>python2.4与2.5的异常基类变化</title><content type='html'>&amp;#24037;&amp;#20316;&amp;#20013;&amp;#65292; &amp;#26377;&amp;#19968;&amp;#26381;&amp;#21153;&amp;#38656;&amp;#35201;&amp;#20174;freeBSD&amp;#36801;&amp;#31227;&amp;#21040;centOS&amp;#19978;&amp;#12290;&amp;#20854;&amp;#20013;&amp;#26377;&amp;#19968;python&amp;#33050;&amp;#26412;&amp;#26377;&amp;#20123;&amp;#39740;&amp;#24322;&amp;#12290;&lt;br&gt;&amp;#22312;freeBSD&amp;#19978;&amp;#21487;&amp;#20197;&amp;#27491;&amp;#24120;&amp;#65292; &amp;#22312;centOS&amp;#19978;&amp;#19981;&amp;#33021;&amp;#27491;&amp;#24120;&amp;#12290;&amp;#26368;&amp;#21518;&amp;#30446;&amp;#26631;&amp;#23450;&amp;#20301;&amp;#22312;&amp;#33050;&amp;#26412;&amp;#26368;&amp;#21518;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#19978;&amp;#65292; &amp;#22823;&amp;#27010;&amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;try:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;#27979;&amp;#35797;&amp;#26465;&amp;#20214;:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;do_someting()&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;sys.exit(0)&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;else:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;sys.exit(1) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;except Exception: &amp;nbsp; &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(1) &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;br&gt;&lt;br&gt;centOS&amp;#19978;&amp;#65292; python&amp;#30340;&amp;#29256;&amp;#26412;&amp;#26159;2.4&amp;#30340;&amp;#12290; freeBSD&amp;#19979;&amp;#23433;&amp;#35013;&amp;#30340;&amp;#26159;2.5. &lt;br&gt;&amp;#26087;&amp;#29256;&amp;#26412;&amp;#30340;Exception&amp;#26159;&amp;#22522;&amp;#31867;&amp;#65306; &amp;#22240;&amp;#27492;&amp;#22312;2.4&amp;#19978;&amp;#33050;&amp;#26412;&amp;#27704;&amp;#36828;&amp;#26159;&amp;#36820;&amp;#22238;1&amp;#30340;&amp;#12290;&lt;br&gt;&amp;#21040;&amp;#20102;&amp;#26032;&amp;#30340;&amp;#29256;&amp;#26412;BaseException&amp;#25165;&amp;#26159;&amp;#22522;&amp;#31867;&amp;#65306; &amp;#22240;&amp;#27492;SystemExit&amp;#21644;Exception&amp;#26159;&amp;#21516;&amp;#19968;&amp;#32423;&amp;#12290;&amp;#33050;&amp;#26412;&amp;#21487;&amp;#20197;&amp;#36820;&amp;#22238;0&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#26159;&amp;#36801;&amp;#31227;&amp;#21518;&amp;#30340;&amp;#20027;&amp;#35201;&amp;#38382;&amp;#39064;&amp;#12290; &amp;#20854;&amp;#23454;&amp;#65292; &amp;#24212;&amp;#35813;&amp;#26159;&amp;#20316;&amp;#32773;&amp;#19981;&amp;#30693;&amp;#36947;sys.exit&amp;#30340;&amp;#21518;&amp;#26524;&amp;#12290;&amp;#20316;&amp;#32773;&amp;#25226;sys.exit&amp;#24403;&amp;#25104;os._exit&amp;#20102;&amp;#12290;&lt;br&gt;&amp;#22914;&amp;#19979;&amp;#26159;APUE&amp;#37324;&amp;#30340;&amp;#19968;&amp;#24133;&amp;#22270;&amp;#65306;&lt;br&gt;&lt;div id="go90" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_485hh925bcb_b" style="height:380px;width:481px"&gt;&lt;/div&gt;&amp;#26631;&amp;#20934;C&amp;#37324;&amp;#30340;exit&amp;#20989;&amp;#25968;&amp;#22312;&amp;#35843;&amp;#29992;&amp;#21518;&amp;#65292; &amp;#19981;&amp;#26159;&amp;#39532;&amp;#19978;&amp;#36864;&amp;#20986;&amp;#31243;&amp;#24207;&amp;#65292; &amp;#32780;&amp;#26159;&amp;#36816;&amp;#34892;&amp;#19968;&amp;#20123;&amp;#25910;&amp;#23614;&amp;#24037;&amp;#20316;&amp;#12290;&amp;#27604;&amp;#22914;&amp;#25226;buffer&amp;#37324;&amp;#30340;&amp;#25968;&amp;#25454;flush&amp;#21040;&amp;#30913;&amp;#30424;&amp;#31561;&amp;#31561;&amp;#24037;&amp;#20316;&amp;#12290;&amp;#28982;&amp;#21518;&amp;#25165;&amp;#26159;&amp;#35843;&amp;#29992;&amp;#30495;&amp;#27491;&amp;#30340;&amp;#36864;&amp;#20986;&amp;#20989;&amp;#25968;&amp;#65306;_exit&lt;br&gt;&lt;br&gt;python&amp;#30340;sys.exit&amp;#26159;&amp;#25243;&amp;#20986;&amp;#19968;&amp;#20010;&amp;#24322;&amp;#24120;&amp;#65306;SystemExit&amp;#65292; python&amp;#20250;&amp;#40664;&amp;#35748;&amp;#20250;catch&amp;#36825;&amp;#20010;&amp;#24322;&amp;#24120;&amp;#65292; &amp;#22823;&amp;#24847;&amp;#20026;&amp;#65306;&lt;br&gt;&lt;br&gt;try:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#25105;&amp;#20204;&amp;#30340;python&amp;#20195;&amp;#30721;&lt;br&gt;exception SystemExit:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#20570;&amp;#19968;&amp;#20123;&amp;#25910;&amp;#23614;&amp;#24037;&amp;#20316;&amp;#65292; &amp;#22914;flush&amp;#20043;&amp;#31867;&amp;#30340;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-344947972794119712?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/344947972794119712/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/08/python2425.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/344947972794119712'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/344947972794119712'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/08/python2425.html' title='python2.4与2.5的异常基类变化'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-848832246901972345</id><published>2010-08-15T09:35:00.001-07:00</published><updated>2010-08-15T09:41:07.326-07:00</updated><title type='text'>递归, 循环, 迭代</title><content type='html'>&amp;#24037;&amp;#20316;&amp;#20013;, &amp;#38656;&amp;#35201;&amp;#26377;&amp;#21382;&amp;#36941;&amp;#30446;&amp;#24405;&amp;#36827;&amp;#34892;&amp;#19968;&amp;#20123;&amp;#25805;&amp;#20316;. python&amp;#33258;&amp;#24102;&amp;#30340;os.walk&amp;#24456;&amp;#24378;&amp;#22823;, &amp;#20294;&amp;#26159;&amp;#27809;&amp;#26377;maxdepth&amp;#36825;&amp;#31181;&amp;#23618;&amp;#25968;&amp;#21442;&amp;#25968;.&lt;br&gt;&lt;br&gt;os.walk&amp;#26159;&amp;#21407;&amp;#26412;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#36882;&amp;#24402;. &amp;#19979;&amp;#38754;&amp;#26159;&amp;#23427;&amp;#30340;&amp;#20195;&amp;#30721;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;273&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;274&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # Note that listdir and error are globals in this module due&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;275&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # to earlier import-*.&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;276&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; names = listdir(top)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;277&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except error, err:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;278&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if onerror is not None:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;279&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; onerror(err)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;280&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;281 &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;282&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirs, nondirs = [], []&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;283&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in names:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;284&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if isdir(join(top, name)):&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;285&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirs.append(name)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;286&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;287&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; nondirs.append(name)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;288 &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;289&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if topdown:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;290&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield top, dirs, nondirs&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;291&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in dirs:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;292&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; path = join(top, name)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;293&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if followlinks or not islink(path):&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;294&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for x in walk(path, topdown, onerror, followlinks):&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;295&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield x&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;296&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not topdown:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;297&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield top, dirs, nondirs&lt;/font&gt;&lt;br&gt;&lt;br&gt;BTW:: &amp;#36825;&amp;#37324;&amp;#38656;&amp;#35201;&amp;#27880;&amp;#24847;*nux&amp;#30340;ENAMETOOLONG &amp;#38169;&amp;#35823;. &lt;br&gt;&lt;br&gt;&amp;#36882;&amp;#24402;&amp;#26080;&amp;#27861;&amp;#25353;&amp;quot;&amp;#23618;&amp;quot;&amp;#21382;&amp;#36941;&amp;#30446;&amp;#24405;. &amp;#23427;&amp;#21482;&amp;#33021;&amp;#19968;&amp;#26465;&amp;#19968;&amp;#26465;&amp;#36335;&amp;#24452;&amp;#36208;&amp;#23613;.&lt;br&gt;&lt;br&gt;&amp;#26379;&amp;#21451;&amp;#35828;&amp;#20351;&amp;#29992;&amp;#24490;&amp;#29615;&amp;#20063;&amp;#21487;&amp;#20197;&amp;#23454;&amp;#29616;&amp;#36882;&amp;#24402;, &amp;#36825;&amp;#31181;&amp;#20195;&amp;#30721;&amp;#20174;&amp;#26469;&amp;#27809;&amp;#26377;&amp;#20889;&amp;#36807;. &amp;#20063;&amp;#19968;&amp;#30452;&amp;#22312;&amp;#36855;&amp;#24785;&amp;#12290; &lt;br&gt;&amp;#20294;&amp;#26159;&amp;#21463; http://www.devshed.com/c/a/Python/Basic-Threading-in-Python/2/ &amp;#30340;&amp;#21551;&amp;#21457;.&lt;br&gt;&amp;#31361;&amp;#28982;&amp;#26126;&amp;#30333;&amp;#24490;&amp;#29615;&amp;#26159;&amp;#24590;&amp;#20040;&amp;#20570;&amp;#21040;&amp;#36882;&amp;#24402;&amp;#30340;&amp;#12290; &amp;#20110;&amp;#26159;&amp;#33258;&amp;#24049;&amp;#20351;&amp;#29992;&amp;#24490;&amp;#29615;&amp;#33258;&amp;#24049;&amp;#20889;&amp;#20102;&amp;#19968;&amp;#20010;&amp;#21382;&amp;#36941;&amp;#30340;&amp;#20989;&amp;#25968;:&lt;br&gt;&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;def loop_walk(top, n): &lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack = Queue.Queue()&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub_stack = Queue.Queue()&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirs = []&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; files = []&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = None&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack.put([top])&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while True:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if stack.empty():&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # stack&amp;#34987;&amp;#21462;&amp;#23436;&amp;#20102;&amp;#65292; &amp;#19979;&amp;#19968;&amp;#23618;&amp;#38431;&amp;#21015;&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; stack, sub_stack = sub_stack, stack&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if n &amp;lt;= 1:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield [], [], None&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n -= 1&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; continue&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; top_list = stack.get(False)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except Queue.Empty:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield [], [], None&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for top in top_list:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for item in os.listdir(top):&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; item = os.path.join(top, item)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if os.path.isdir(item):&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirs.append(item)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; files.append(item)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # &amp;#20986;&amp;#38169;&amp;#65292; &amp;#27604;&amp;#22914;&amp;#27809;&amp;#26377;&amp;#26435;&amp;#38480;&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #traceback.print_exc()&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = top&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; yield dirs, files, error&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if dirs:&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sub_stack.put(dirs)&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; dirs = []&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; files = []&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; error = None&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#20195;&amp;#30721;&amp;#38271;&amp;#24230;double&amp;#20102;.........&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-848832246901972345?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/848832246901972345/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/08/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/848832246901972345'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/848832246901972345'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/08/blog-post.html' title='递归, 循环, 迭代'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2482946644335318931</id><published>2010-07-18T01:31:00.001-07:00</published><updated>2010-07-18T01:34:49.663-07:00</updated><title type='text'>IO笔记3</title><content type='html'>read(2)&amp;#21644;write(2)&amp;#37117;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#29305;&amp;#28857;: &amp;#26399;&amp;#24453;&amp;#34987;&amp;#22788;&amp;#29702;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#19982;&amp;#24050;&amp;#32463;&amp;#34987;&amp;#22788;&amp;#29702;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#37327;&amp;#21487;&amp;#20197;&amp;#19981;&amp;#19968;&amp;#33268;.&lt;br&gt;&amp;#27604;&amp;#22914;: &lt;br&gt;char buffer[5000];&lt;br&gt;size_t count = read(1, buffer, 4096);&lt;br&gt;&lt;br&gt;&amp;#35843;&amp;#29992;read&amp;#35835;4096&amp;#20010;bytes, &amp;#20294;&amp;#26159;&amp;#26159;&amp;#19981;&amp;#26159;&amp;#30495;&amp;#30340;&amp;#24050;&amp;#32463;&amp;#35835;&amp;#20102;4096&amp;#20010;bytes, &amp;#36825;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#24517;&amp;#28982;&amp;#35201;&amp;#27714;&amp;#30340;.&lt;br&gt;&lt;br&gt;socket&amp;#30340;I/O&amp;#26159;&amp;#26368;&amp;#26126;&amp;#26174;&amp;#30340;.&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#19981;&amp;#19968;&amp;#33268;, &amp;#23601;&amp;#35201;&amp;#27714;&amp;#31243;&amp;#24207;&amp;#21592;&amp;#21435;&amp;#22788;&amp;#29702;. &amp;#19981;&amp;#36807;, &amp;#36825;&amp;#37117;&amp;#26159;&amp;#24120;&amp;#20107;&amp;#20102;, &amp;#37117;&amp;#26377;&amp;#28385;&amp;#36275;&amp;#36825;&amp;#26679;&amp;#38656;&amp;#27714;&amp;#30340;&amp;#20989;&amp;#25968;. &lt;br&gt;&lt;br&gt;&amp;#20294;&amp;#26159;, &amp;#36825;&amp;#23601;&amp;#38656;&amp;#35201;&amp;#31243;&amp;#24207;&amp;#21592;&amp;#21487;&amp;#20197;&amp;#33258;&amp;#24049;&amp;#20998;&amp;#28165;&amp;#36825;&amp;#20004;&amp;#31181;&amp;#24773;&amp;#20917;&amp;#30340;&amp;#20989;&amp;#25968;.&lt;br&gt;&lt;br&gt;&amp;#19981;&amp;#35201;&amp;#35748;&amp;#20026;sys.stdin.read(4096)&amp;#21644;os.read(sys.stdin.fileno(), 4096)&amp;#26159;&amp;#19968;&amp;#26679;&amp;#30340;.&lt;br&gt;&lt;br&gt;$ (echo -e &amp;quot;12345\n&amp;quot;; sleep 10) | python -c &amp;#39;&lt;br&gt;import sys&lt;br&gt;print sys.stdin.read(4096)&amp;#39;&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;python&amp;#31243;&amp;#24207;&amp;#26159;&amp;#34987;block&amp;#20102;10&amp;#31186;&amp;#25165;&amp;#36816;&amp;#34892;print&amp;#30340;. &amp;#20294;&amp;#26159;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#26159;&amp;#39532;&amp;#19978;&amp;#25910;&amp;#21040;&amp;#25968;&amp;#25454;&amp;#30340;:&lt;br&gt;$ (echo -e &amp;quot;12345\n&amp;quot;; sleep 10) | python -c &amp;#39;&lt;br&gt;import sys&lt;br&gt;import os&lt;br&gt;print os.read(sys.stdin.fileno(), 4096)&amp;#39;&lt;br&gt;&lt;br&gt;C&amp;#30340;standard I/O&amp;#26159;&amp;#19968;&amp;#32452;&amp;#20445;&amp;#35777;&amp;#21487;&amp;#20197;&amp;#36820;&amp;#22238;&amp;#25351;&amp;#23450;&amp;#25968;&amp;#25454;(&amp;#37327;)&amp;#30340;&amp;#20989;&amp;#25968;&lt;br&gt;&lt;br&gt;standard I/O&amp;#22686;&amp;#21152;&amp;#20102;buffer, &amp;#20197;&amp;#20943;&amp;#23569;read, write&amp;#30340;&amp;#27425;&amp;#25968;. &amp;#21407;&amp;#21017;&amp;#23601;&amp;#26159;&amp;#27599;&amp;#27425;&amp;#35843;&amp;#29992;read&amp;#30340;&amp;#26102;&amp;#20505;&amp;#35835;&amp;#20837;BUF_SIZE&amp;#30340;&amp;#25968;&amp;#25454;&amp;#21040;buffer&amp;#31354;&amp;#38388;&amp;#20013;, &amp;#19979;&amp;#38754;&amp;#26159;read&amp;#20989;&amp;#25968;&amp;#30340;&amp;#21407;&amp;#22411;:&lt;br&gt;&lt;br&gt;ssize_t read(int fd, void *buf, &lt;b&gt;size_t count&lt;/b&gt;);&lt;br&gt;&lt;br&gt;count&amp;#26159;&amp;#20250;&amp;#26681;&amp;#25454;file descriptor&amp;#30340;&amp;#19981;&amp;#21516;&amp;#21464;&amp;#21270;, &amp;#22914;:&lt;br&gt;1. terminate device&amp;#26102;&amp;#20026;1024&lt;br&gt;2. &amp;#19981;&amp;#26159;terminate device&amp;#26102;&amp;#20026;&amp;#26159;page size, &amp;#25110;&amp;#32773;&amp;#31243;&amp;#24207;&amp;#21592;&amp;#20351;&amp;#29992;setvbuf&amp;#25351;&amp;#23450;&lt;br&gt;&lt;br&gt;standard I/O&amp;#26377;&amp;#19977;&amp;#20010;&amp;#31181;&amp;#38750;&amp;#26684;&amp;#24335;&amp;#21270;&amp;#20989;&amp;#25968;:&lt;br&gt;1. character-at-a-time I/O&lt;br&gt;2. line-at-a-time I/O&lt;br&gt;3. direct I/O&lt;br&gt;&lt;br&gt;&amp;#26080;&amp;#35770;&amp;#20351;&amp;#29992;&amp;#21738;&amp;#31181;&amp;#20989;&amp;#25968;, &amp;#23427;&amp;#37117;&amp;#26159;&amp;#22914;&amp;#19979;&amp;#30340;&amp;#26041;&amp;#24335;:&lt;br&gt;&lt;br&gt;read(fd, buffer_ptr, BUF_SIZE);&lt;br&gt;&lt;br&gt;&amp;#37027;&amp;#24597;&amp;#20320;&amp;#21482;&amp;#26159;&amp;#24819;&amp;#20351;&amp;#29992;fgetc&amp;#24471;&amp;#21040;&amp;#19968;&amp;#20010;&amp;#23383;&amp;#31526;. &amp;#37117;&amp;#26159;&amp;#35843;&amp;#29992;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20989;&amp;#25968;. &amp;#19968;&amp;#33324;&amp;#24773;&amp;#20917;BUF_SIZE &amp;gt;= 1024.&lt;br&gt;&lt;br&gt;standard I/O&amp;#38500;&amp;#20102;&amp;#32531;&amp;#23384;&amp;#22806;. &amp;#36824;&amp;#20445;&amp;#35777;&amp;#20102;&amp;#36820;&amp;#22238;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#26159;&amp;#24819;&amp;#24471;&amp;#21040;&amp;#30340;, &amp;#22914;:&lt;br&gt;1. character-at-a-time I/O&amp;#26102;, &amp;#20445;&amp;#35777;&amp;#36820;&amp;#22238;&amp;#19968;&amp;#20010;&amp;#23383;&amp;#31526;&lt;br&gt;2. line-at-a-time I/O&amp;#26102;, &amp;#20445;&amp;#35777;&amp;#36820;&amp;#22238;&amp;#19968;&amp;#34892;&amp;#25968;&amp;#25454;, &amp;#20197;NULL&amp;#32467;&amp;#23614;. &lt;br&gt;3. direct I/O&amp;#26102;, &amp;#20445;&amp;#35777;&amp;#36820;&amp;#22238;&amp;#25351;&amp;#23450;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#32467;&amp;#26500;.&lt;br&gt;&lt;br&gt;&amp;#21542;&amp;#21017;, &amp;#20250;&amp;#22810;&amp;#27425;&amp;#35843;&amp;#29992;&amp;#19978;&amp;#38754;&amp;#30340;read&amp;#20989;&amp;#25968;, &amp;#30452;&amp;#21040;&amp;#21462;&amp;#24471;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#28385;&amp;#36275;&amp;#35201;&amp;#27714;, &amp;#36807;&amp;#31243;&amp;#20013;&amp;#20250;&amp;#20986;&amp;#26469;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#24773;&amp;#20917;:&lt;br&gt;1. block; &lt;br&gt;2. EOF; &lt;br&gt;3. Error&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2482946644335318931?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2482946644335318931/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/07/io3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2482946644335318931'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2482946644335318931'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/07/io3.html' title='IO笔记3'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3674759774680000557</id><published>2010-07-16T19:00:00.001-07:00</published><updated>2010-07-16T19:02:06.293-07:00</updated><title type='text'>IO笔记2</title><content type='html'>&lt;font size="3"&gt;&lt;b style="background-color:#f1c232"&gt;&amp;#20004;&amp;#23618;buffer&amp;#30340;&amp;#23384;&amp;#22312;&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;23 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;24 &lt;br&gt;&amp;nbsp;25 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int retval ;&lt;br&gt;&amp;nbsp;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1){&lt;br&gt;&amp;nbsp;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c[BUFSIZ];&lt;br&gt;&amp;nbsp;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval = read(0, c, 1);&lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%c\n&amp;quot;, *c);&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;&amp;nbsp;33 }&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#65292; &amp;#29992;&amp;#25143;&amp;#36755;&amp;#20837;&amp;#19968;&amp;#27425;&amp;#65292; read&amp;#20989;&amp;#25968;&amp;#34987;&amp;#35843;&amp;#29992;N&amp;#27425;(&amp;#25968;&amp;#25454;&amp;#30340;&amp;#38271;&amp;#24230;)&amp;#12290;&amp;#20063;&amp;#23601;&amp;#26159;&amp;#35828;&amp;#29992;&amp;#25143;&amp;#36755;&amp;#20837;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#24050;&amp;#32463;&amp;#34987;&amp;#32531;&amp;#23384;&amp;#20102;&amp;#12290;&lt;br&gt;&amp;#20877;&amp;#22914;&amp;#19979;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp;23 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;24 &lt;br&gt;&amp;nbsp;25 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int retval ;&lt;br&gt;&amp;nbsp;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int i;&lt;br&gt;&amp;nbsp;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int c;&lt;br&gt;&amp;nbsp;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%d\n&amp;quot;, BUFSIZ);&lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(i = 0; i &amp;lt; BUFSIZ / 2; i++){&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c = fgetc(stdin);&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;&amp;nbsp;34 }&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;fgetc&amp;#34987;&amp;#35843;&amp;#29992;N&amp;#27425;(&amp;#25968;&amp;#25454;&amp;#30340;&amp;#38271;&amp;#24230;), &amp;#20294;&amp;#26159;read&amp;#30340;&amp;#35843;&amp;#29992;&amp;#24773;&amp;#20917;&amp;#22914;&amp;#19979;:&lt;br&gt;1. &amp;#24403;stdin&amp;#19981;&amp;#26159;terminate device&amp;#26102;, &amp;#34987;&amp;#35843;&amp;#29992;&amp;#19968;&amp;#27425;, read&amp;#30340;count&amp;#21442;&amp;#25968;&amp;#20026;4096&lt;br&gt;2. &amp;#24403;stdin&amp;#26159;terminate device&amp;#26102;, &amp;#34987;&amp;#35843;&amp;#29992;&amp;#20004;&amp;#27425;, read&amp;#30340;count&amp;#21442;&amp;#25968;&amp;#20026;1024&lt;br&gt;* &amp;#33267;&amp;#23569;&amp;#24590;&amp;#20040;&amp;#24471;&amp;#21040;&amp;#36825;&amp;#31181;&amp;#25968;&amp;#25454;, &amp;#31572;&amp;#26696;&amp;#26159;&amp;#20351;&amp;#29992;strace&amp;#20982;&amp;#22120;&amp;#12290;&lt;br&gt;&lt;br&gt;libc&amp;#20250;&amp;#26681;&amp;#25454;stdin&amp;#26159;&amp;#20160;&amp;#20040;&amp;#20351;&amp;#29992;setvbuf&amp;#23545;FILE&amp;#23545;&amp;#35937;&amp;#35774;&amp;#32622;buffer.&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#20004;&amp;#20010;&amp;#20363;&amp;#23376;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#65306; &lt;br&gt;1. &amp;#20351;&amp;#29992;standard I/O&amp;#20174;terminate device&amp;#35835;&amp;#25968;&amp;#25454;&amp;#26102;&amp;#65292; &amp;#20854;&amp;#23454;&amp;#32463;&amp;#36807;&amp;#20102;&amp;#20004;&amp;#20010;buffer&amp;#26426;&amp;#21046;&amp;#12290;&lt;br&gt;2. standard I/O&amp;#35835;&amp;#19981;&amp;#21516;file descriptor&amp;#26102;&amp;#30340;buffer&amp;#22823;&amp;#23567;&amp;#20250;&amp;#21464;&amp;#21270;&amp;#12290; &amp;#21152;&amp;#19978;&amp;#20174;APUE&amp;#20013;&amp;#30693;&amp;#36947;&amp;#30340;&amp;#65292;&amp;#24773;&amp;#20917;&amp;#20250;&amp;#26159;&amp;#36825;&amp;#26679; &lt;br&gt;&amp;nbsp;* &amp;#24403;stdin, stdout&amp;#26159;terminate device&amp;#26102;&amp;#65292; standard I/O&amp;#20250;&amp;#20351;&amp;#29992;&amp;#34892;&amp;#32531;&amp;#23384;&amp;#65292; buffer&amp;#22823;&amp;#23567;&amp;#20026;1024. &lt;br&gt;&amp;nbsp;* &amp;#24403;stdin, stdout&amp;#19981;&amp;#26159;terminate device&amp;#26102;&amp;#65292; standard I/O&amp;#20250;&amp;#20351;&amp;#29992;full buffer, buffer&amp;#22823;&amp;#23567;&amp;#20026;4096.&lt;br&gt;&lt;br&gt;&amp;#22909;&amp;#65292; &amp;#30693;&amp;#36947;&amp;#36825;&amp;#20004;&amp;#31181;buffer&amp;#26426;&amp;#21046;&amp;#19982;buffer&amp;#22823;&amp;#23567;&amp;#20102;&amp;#65292; &amp;#31227;&amp;#27493;&amp;#30475;&amp;#36825;&amp;#19968;&amp;#31687;&amp;#25991;&amp;#31456;&amp;#20250;&amp;#26377;&amp;#24456;&amp;#22909;&amp;#30340;&amp;#25910;&amp;#33719;&amp;#65306;&lt;br&gt;&amp;nbsp;* &lt;a href="http://www.pixelbeat.org/programming/stdio_buffering/" id="t-qm" title="http://www.pixelbeat.org/programming/stdio_buffering/"&gt;http://www.pixelbeat.org/programming/stdio_buffering/&lt;/a&gt;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#25991;&amp;#31456;&amp;#20174;&amp;#19968;&amp;#20010;&amp;#20363;&amp;#23376;&amp;#24320;&amp;#22987;, &amp;#22914;&amp;#19979;:&lt;br&gt;# tail -f access.log | cut -d&amp;#39; &amp;#39;|uniq&lt;br&gt;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#21629;&amp;#20196;&amp;#27809;&amp;#26377;&amp;#36755;&amp;#20986;? &amp;#21621;&amp;#21621;, &amp;#20854;&amp;#20013;&amp;#23601;&amp;#26159;IO&amp;#32531;&amp;#23384;&amp;#30340;&amp;#26426;&amp;#21046;.&lt;br&gt;&lt;br&gt;&lt;b&gt;&lt;font size="3"&gt;&lt;font style="background-color:#f1c232"&gt;&amp;#39044;&amp;#35835;&amp;#25968;&amp;#25454;, &amp;#20943;&amp;#23569;read, write&lt;/font&gt;&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;standard I/O&amp;#37117;&amp;#26159;&amp;#20250;&amp;#39044;&amp;#35835;&amp;#19968;&amp;#23450;&amp;#25968;&amp;#37327;&amp;#30340;&amp;#25968;&amp;#25454;, &amp;#29992;&amp;#20110;&amp;#20943;&amp;#23569;&amp;#35843;&amp;#29992;read, write&amp;#30340;&amp;#27425;&amp;#25968;.&lt;br&gt;&amp;#20351;&amp;#29992;standard I/O&amp;#30340;&amp;#22909;&amp;#22788;&amp;#23601;&amp;#26159;&amp;#31243;&amp;#24207;&amp;#21592;&amp;#26080;&amp;#38656;&amp;#25805;&amp;#24515;&amp;#36825;&amp;#20010;&amp;#39044;&amp;#35835;&amp;#25968;&amp;#25454;&amp;#30340;&amp;#22823;&amp;#23567;, &amp;#21482;&amp;#38656;&amp;#35201;&amp;#30693;&amp;#36947;&amp;#23427;&amp;#26159;&amp;#39044;&amp;#35835;&amp;#30340;&amp;#21363;&amp;#21487;.&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#19981;&amp;#30693;&amp;#36947;&amp;#20250;&amp;#39044;&amp;#35835;&amp;#30340;&amp;#35805;, &amp;#19978;&amp;#38754;&amp;#30340;URL&amp;#30340;&amp;#20363;&amp;#23376;&amp;#23601;&amp;#26080;&amp;#27861;&amp;#26126;&amp;#30333;.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3674759774680000557?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3674759774680000557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/07/io2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3674759774680000557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3674759774680000557'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/07/io2.html' title='IO笔记2'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4102382548892769136</id><published>2010-07-11T03:49:00.001-07:00</published><updated>2010-07-11T18:38:01.183-07:00</updated><title type='text'>IO笔记</title><content type='html'>IO&amp;#37096;&amp;#20998;&amp;#24635;&amp;#26159;&amp;#24456;&amp;#20081;&amp;#12290;&amp;#19981;&amp;#30693;&amp;#36947;&amp;#26159;&amp;#22240;&amp;#20026;API&amp;#22810;&amp;#36824;&amp;#26159;&amp;#20854;&amp;#23427;&amp;#21407;&amp;#22240;&amp;#65306;&lt;br&gt;&amp;nbsp;0. &amp;#38459;&amp;#22622;&amp;#30340;&amp;#23384;&amp;#22312;&lt;br&gt;&amp;nbsp;1. glibc&amp;#30340;section3&amp;#25163;&amp;#20876;&amp;#21644;linux&amp;#30340;section2&amp;#26377;&amp;#21516;&amp;#21517;&amp;#20989;&amp;#25968;&amp;#12290;&lt;br&gt;&amp;nbsp;2. posix, ISO&amp;#37117;&amp;#26377;&amp;#35201;&amp;#27714;&lt;br&gt;&amp;nbsp;3. terminal IO&amp;#19982;&amp;#20854;&amp;#23427;IO&amp;#26377;&amp;#19981;&amp;#21516;&amp;#30340;&amp;#34920;&amp;#29616;&lt;br&gt;&amp;nbsp;4. IO&amp;#32531;&amp;#23384;&amp;#30340;&amp;#26426;&amp;#21046;&lt;br&gt;&amp;nbsp;5. &amp;#36824;&amp;#26377;&amp;#20247;&amp;#22810;&amp;#21476;&amp;#32769;&amp;#30340;&amp;#21517;&amp;#35789;....&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ffd966"&gt;EOF&lt;/b&gt;&lt;font style="background-color:#ffd966"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;br&gt;EOF&amp;#26159;&amp;#20160;&amp;#20040;? &amp;#20160;&amp;#20040;&amp;#26102;&amp;#20505;&amp;#25165;&amp;#20250;&amp;#20135;&amp;#29983;? &amp;#36824;&amp;#26159;&amp;#21644;ctrl_c&amp;#19968;&amp;#26679;&amp;#26159;signal ?&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#19979;&amp;#20195;&amp;#30721;&amp;#30340;&amp;#36816;&amp;#34892;&amp;#32080;&amp;#26524;&amp;#26159; -1&lt;br&gt;&amp;nbsp;19 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;20 &lt;br&gt;&amp;nbsp;21 int&lt;br&gt;&amp;nbsp;22 main(int argc, char *argv[])&lt;br&gt;&amp;nbsp;23 {&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%d\n&amp;quot;, EOF);&lt;br&gt;&amp;nbsp;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;27 }&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;#34920;&amp;#31034;EOF&amp;#26159; -1 ?&lt;br&gt;&lt;br&gt;&amp;#24403;&amp;#26576;&amp;#19968;&amp;#27425;&amp;#20351;&amp;#29992; ssize_t read(int fd, void *buf, size_t count); &amp;#20989;&amp;#25968;&amp;#20174;&amp;#19968;&amp;#20010;file descriptor&amp;#20013;&amp;#35835;&amp;#25968;&amp;#25454;&amp;#26102;(count&amp;gt;0), &amp;#20989;&amp;#25968;&amp;#24471;&amp;#21040;0&amp;#20010;&amp;#23383;&amp;#33410;&amp;#34920;&amp;#31034;&amp;#35835;&amp;#21040;&amp;#25991;&amp;#20214;&amp;#30340;&amp;#23614;&amp;#37096;&amp;#20102;. &amp;#36825;&amp;#26102;read&amp;#20989;&amp;#25968;&amp;#36820;&amp;#22238;0.&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#35835;&amp;#31471;&amp;#30340;pipe&amp;#20851;&amp;#38381;&amp;#21518;&amp;#65292; &amp;#21482;&amp;#35835;&amp;#31471;pipe&amp;#22312;&amp;#35835;&amp;#23436;&amp;#21518;&amp;#20250;&amp;#20135;&amp;#29983;EOF&amp;#65306;&lt;br&gt;&amp;nbsp; 2 import os&lt;br&gt;&amp;nbsp; 3 import sys&lt;br&gt;&amp;nbsp; 4 import time&lt;br&gt;&amp;nbsp; 5 &lt;br&gt;&amp;nbsp; 6 read_end, write_end = os.pipe()&lt;br&gt;&amp;nbsp; 7 &lt;br&gt;&amp;nbsp; 8 pid = os.fork()&lt;br&gt;&amp;nbsp; 9 if pid &amp;lt; 0:&lt;br&gt;&amp;nbsp;10&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;Error&amp;quot;&lt;br&gt;&amp;nbsp;11&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(1)&lt;br&gt;&amp;nbsp;12 if pid == 0:&lt;br&gt;&amp;nbsp;13&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # parent&lt;br&gt;&amp;nbsp;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.close(write_end)&lt;br&gt;&amp;nbsp;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try_time = 1&lt;br&gt;&amp;nbsp;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # &amp;#22240;&amp;#20026;&amp;#26080;&amp;#27861;&amp;#24471;&amp;#21040;child process&amp;#20250;&amp;#21457;&amp;#22810;&amp;#23569;&amp;#25968;&amp;#25454;&amp;#65292; &amp;#21482;&amp;#33021;&amp;#20351;&amp;#29992;&amp;#27515;&amp;#24490;&amp;#29615;&amp;#21435;&amp;#35835;&amp;#25968;&amp;#25454;&lt;br&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while True:&lt;br&gt;&amp;nbsp;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;%s time(s) call read&amp;quot; % try_time&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; content = os.read(read_end, 1)&lt;/font&gt;&lt;br&gt;&amp;nbsp;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not content:&lt;br&gt;&amp;nbsp;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.write(1, content)&lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try_time += 1&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)&lt;br&gt;&amp;nbsp;25 &lt;br&gt;&amp;nbsp;26 else:&lt;br&gt;&amp;nbsp;27&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # child&lt;br&gt;&amp;nbsp;28&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.close(read_end)&lt;br&gt;&amp;nbsp;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.write(write_end, &amp;quot;#&amp;quot; * 100)&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # &amp;#20851;&amp;#20102;parent&amp;#23601;&amp;#33021;&amp;#35835;&amp;#21040;EOF&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.close(write_end)&lt;/font&gt;&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit(0)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;&amp;#20013;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#26159;&amp;#26377;&amp;#22266;&amp;#23450;&amp;#22823;&amp;#23567;(&amp;#26576;&amp;#19968;&amp;#29366;&amp;#24577;), &amp;#20294;&amp;#26159;&amp;#22312;terminal IO&amp;#37324;&amp;#65292;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#22266;&amp;#23450;&amp;#30340;&amp;#23614;&amp;#37096;&amp;#30340;, &amp;#38656;&amp;#35201;&amp;#36755;&amp;#20837;&amp;#32773;&amp;#25351;&amp;#23450;&amp;#20160;&amp;#20040;&amp;#26102;&amp;#20505;&amp;#25165;&amp;#26159;end-of-file, &amp;#25152;&amp;#20197;, ctrl_D&amp;#20986;&amp;#29616;&amp;#20102;. ctrl_D&amp;#26159;&amp;#19968;&amp;#20010;&amp;#29305;&amp;#27530;&amp;#25511;&amp;#21046;&amp;#31526;&amp;#12290;&amp;#34987;tty&amp;#30340;&amp;#39537;&amp;#21160;&amp;#22788;&amp;#29702;(&amp;#40664;&amp;#35748;&amp;#24773;&amp;#20917;&amp;#19979;&amp;#29992;&amp;#25143;&amp;#31243;&amp;#24207;&amp;#19981;&amp;#33021;&amp;#20174;read&amp;#20989;&amp;#25968;&amp;#24471;&amp;#21040;&amp;#65292; &amp;#38500;&amp;#38750;&amp;#35201;&amp;#27714;tty&amp;#19981;&amp;#22788;&amp;#29702;)&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#20102;&amp;#35299;ctrl_D&amp;#21069;, &amp;#24212;&amp;#35813;&amp;#20808;&amp;#35201;&amp;#20102;&amp;#35299;IO&amp;#30340;&amp;#32531;&amp;#23384;&amp;#26426;&amp;#21046;.&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ffd966;color:#000000"&gt;standard IO&amp;#32531;&amp;#23384; &amp;#19982; &amp;#24213;&amp;#23618;IO&amp;#32531;&amp;#23384;&lt;/b&gt;&lt;br&gt;&amp;#22312;&amp;#27492;&amp;#36825;&amp;#21069;, &amp;#25105;&amp;#23545;getchar&amp;#36825;&amp;#20010;&amp;#20989;&amp;#25968;&amp;#19981;&amp;#35299;, &amp;#20854;&amp;#23454;&amp;#23601;&amp;#26159;&amp;#19981;&amp;#35299;&amp;#22914;&amp;#19979;&amp;#30340;&amp;#20195;&amp;#30721;:&lt;br&gt;&amp;nbsp;19 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;20 &lt;br&gt;&amp;nbsp;21 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c ; &lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(c = getchar() ){&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%c\n&amp;quot;, c);&lt;br&gt;&amp;nbsp;25&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } &amp;nbsp;&lt;br&gt;&amp;nbsp;26 }&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;&amp;#19981;&amp;#35201;&amp;#20197;&amp;#20026;&amp;#31616;&amp;#21333;&amp;#35843;&amp;#29992;getchar&amp;#20989;&amp;#25968;&amp;#21487;&amp;#20197;&amp;#23454;&amp;#29616;vim&amp;#36825;&amp;#31181;&amp;#20132;&amp;#20114;. &lt;br&gt;&lt;b style="color:#0000ff"&gt;&amp;#24403;&amp;#35843;&amp;#29992;read&amp;#21435;&amp;#35835;stdin&amp;#30340;&amp;#25968;&amp;#25454;&amp;#26102;, &amp;#26159;&amp;#34892;&amp;#32531;&amp;#23384;&amp;#30340;.&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#22312;&amp;#31532;&amp;#19968;&amp;#27425;&amp;#35843;&amp;#29992;getchar&amp;#26102;&amp;#25226;&amp;#19968;&amp;#34892;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#35835;&amp;#21040;buffer&amp;#37324;(&amp;#22238;&amp;#36710;&amp;#38190;&amp;#36820;&amp;#22238;), &amp;#19979;&amp;#27425;&amp;#20877;&amp;#35843;&amp;#29992;getchar&amp;#26102;&amp;#20250;&amp;#20174;buffer&amp;#37324;&amp;#21462;. buffer&amp;#27809;&amp;#26377;&amp;#25968;&amp;#25454;&amp;#21518;&amp;#20877;&amp;#31561;&amp;#24453;&amp;#29992;&amp;#25143;&amp;#36755;&amp;#20837;.&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;#26631;&amp;#20934;IO&amp;#19982;&amp;#31995;&amp;#32479;&amp;#24213;&amp;#23618;IO&amp;#36825;&amp;#20004;&amp;#22871;IO&amp;#38656;&amp;#35201;&amp;#20998;&amp;#24320;. &amp;#19981;&amp;#28982;&amp;#20250;&amp;#20986;&amp;#29616;&amp;#20107;&amp;#19982;&amp;#24895;&amp;#36829;&amp;#30340;&amp;#24773;&amp;#20917;, &amp;#22914;:&lt;br&gt;&amp;#20351;&amp;#29992;setbuf&amp;#23545;FILE&amp;#23545;&amp;#35937;&amp;#36827;&amp;#34892;&amp;#20102;&amp;#35774;&amp;#32622;&amp;#21518;, &amp;#28982;&amp;#21518;&amp;#20351;&amp;#29992;&amp;#35843;&amp;#29992;printf&amp;#25805;&amp;#20316;. &amp;#32080;&amp;#26524;&amp;#27809;&amp;#26377;&amp;#20986;&amp;#29616;&amp;#24819;&amp;#35201;&amp;#30340;&amp;#35774;&amp;#32622;&amp;#25928;&amp;#26524;&amp;#12290;&amp;#20363;&amp;#22914;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp;23 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;24 #include &amp;lt;string.h&amp;gt;&lt;br&gt;&amp;nbsp;25 #include &amp;lt;unistd.h&amp;gt;&lt;br&gt;&amp;nbsp;26 &lt;br&gt;&amp;nbsp;27 &lt;br&gt;&amp;nbsp;28 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *input =&amp;nbsp; fdopen(1, &amp;quot;r&amp;quot;);&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *output =&amp;nbsp; fdopen(1, &amp;quot;w&amp;quot;);&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setbuf(input, NULL);&lt;br&gt;&amp;nbsp;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setbuf(output, NULL);&lt;br&gt;&amp;nbsp;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c ;&lt;br&gt;&amp;nbsp;35 &lt;br&gt;&amp;nbsp;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;printf(&amp;quot;Hello World&amp;quot;);&lt;/font&gt;&lt;br&gt;&amp;nbsp;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sleep(10);&lt;br&gt;&amp;nbsp;38 }&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#30340;printf&amp;#30340;&amp;#20869;&amp;#23481;&amp;#26159;&amp;#36807;&amp;#20102;10&amp;#31186;&amp;#21518;&amp;#25165;&amp;#25171;&amp;#21360;&amp;#30340;&amp;#65292; &amp;#26126;&amp;#26174;&amp;#65292; setbuf&amp;#27809;&amp;#26377;&amp;#36215;&amp;#20316;&amp;#29992;&amp;#12290; &amp;#20294;&amp;#26159;&amp;#22914;&amp;#26524;&amp;#20462;&amp;#25913;&amp;#20026;&amp;#22914;&amp;#19979;&amp;#23601;&amp;#19981;&amp;#21516;&amp;#20102;&amp;#65306;&lt;br&gt;&amp;nbsp;23 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;24 #include &amp;lt;string.h&amp;gt;&lt;br&gt;&amp;nbsp;25 #include &amp;lt;unistd.h&amp;gt;&lt;br&gt;&amp;nbsp;26 &lt;br&gt;&amp;nbsp;27 &lt;br&gt;&amp;nbsp;28 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;29&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //&lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *input =&amp;nbsp; fdopen(1, &amp;quot;r&amp;quot;);&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; FILE *output =&amp;nbsp; fdopen(1, &amp;quot;w&amp;quot;);&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setbuf(input, NULL);&lt;br&gt;&amp;nbsp;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setbuf(output, NULL);&lt;br&gt;&amp;nbsp;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c ;&lt;br&gt;&amp;nbsp;35 &lt;br&gt;&amp;nbsp;36&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font color="#0000ff"&gt;fprintf(output, &amp;quot;Hello World&amp;quot;);&lt;/font&gt;&lt;br&gt;&amp;nbsp;37&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sleep(10);&lt;br&gt;&amp;nbsp;38 }&lt;br&gt;&lt;font color="#ff0000"&gt;&amp;#19978;&amp;#38754;&amp;#20195;&amp;#30721;&amp;#30340;&amp;#21306;&amp;#21035;&amp;#22312;&amp;#20110;&amp;#65306;printf&amp;#20351;&amp;#29992;&amp;#20102;stdin&amp;#36825;&amp;#20010;FILE&amp;#23545;&amp;#35937;(&amp;#40664;&amp;#35748;&amp;#26159;line buffer)&amp;#65292; fprintf&amp;#20351;&amp;#29992;&amp;#20102;&amp;#25351;&amp;#23450;&amp;#30340;FILE&amp;#23545;&amp;#35937;&amp;#12290;standard IO&amp;#30340;&amp;#32531;&amp;#23384;&amp;#26159;&amp;#36890;&amp;#36807;&amp;#20462;&amp;#25913;FILE&amp;#23545;&amp;#35937;&amp;#23454;&amp;#29616;&amp;#30340;&amp;#12290;&lt;/font&gt;&lt;br&gt;&lt;br&gt;read&amp;#21644;write&amp;#20250;&amp;#19981;&amp;#20250;&amp;#32531;&amp;#23384;&amp;#65292; &amp;#32531;&amp;#23384;&amp;#26426;&amp;#21046;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#65311; &amp;#36825;&amp;#19982;read, write&amp;#25805;&amp;#20316;&amp;#30340;&amp;#23545;&amp;#35937;&amp;#26377;&amp;#24456;&amp;#22823;&amp;#30340;&amp;#20851;&amp;#31995;&amp;#65292; &amp;#20363;&amp;#22914;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp;28 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;29 &lt;br&gt;&amp;nbsp;30&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1){&lt;br&gt;&amp;nbsp;31&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; char c;&lt;br&gt;&amp;nbsp;32&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void *)read(0, &amp;amp;c, 1);&lt;br&gt;&amp;nbsp;33&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; (void *)write(1, &amp;amp;c, 1);&lt;br&gt;&amp;nbsp;34&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;35 }&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#34429;&amp;#28982;&amp;#20351;&amp;#29992;&amp;#20102;read, write&amp;#65292; &amp;#36824;&amp;#26159;&amp;#29992;&amp;#25143;&amp;#36755;&amp;#20837;&amp;#36824;&amp;#26159;&amp;#34892;&amp;#32531;&amp;#23384;&amp;#30340;&amp;#65292; &amp;#26080;&amp;#27861;&amp;#20687;vim&amp;#19968;&amp;#26679;&amp;#20132;&amp;#20114;&amp;#25805;&amp;#20316;&amp;#12290;&amp;#36825;&amp;#26102;&amp;#35201;&amp;#24819;&amp;#38750;&amp;#34892;&amp;#32531;&amp;#23384;&amp;#65292; &amp;#38656;&amp;#35201;&amp;#25805;&amp;#20316;&amp;#21040;tty&amp;#30340;&amp;#32531;&amp;#23384;&amp;#26426;&amp;#21046;&amp;#12290; &amp;#22914;&amp;#19979;&amp;#30340;&amp;#19968;&amp;#27573;python&amp;#20195;&amp;#30721;&amp;#35774;&amp;#32622;&amp;#20102;tty&amp;#30340;&amp;#32531;&amp;#23384;&amp;#26041;&amp;#24335;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp; 1 #coding:utf-8&lt;br&gt;&amp;nbsp; 2 import os&lt;br&gt;&amp;nbsp; 3 import sys&lt;br&gt;&amp;nbsp; 4 import termios&lt;br&gt;&amp;nbsp; 5 &lt;br&gt;&amp;nbsp; 6 STDIN_FILENO = sys.stdin.fileno()&lt;br&gt;&amp;nbsp; 7 &lt;br&gt;&amp;nbsp; 8 old_attr = termios.tcgetattr(STDIN_FILENO)&lt;br&gt;&amp;nbsp; 9 new_attr = termios.tcgetattr(STDIN_FILENO)&lt;br&gt;&amp;nbsp;10 &lt;br&gt;&amp;nbsp;11 new_attr[3] &amp;amp;= ~ (termios.ICANON | termios.ECHO)&lt;br&gt;&amp;nbsp;12 termios.tcsetattr(STDIN_FILENO, termios.TCSADRAIN, new_attr)&lt;br&gt;&amp;nbsp;13 try:&lt;br&gt;&amp;nbsp;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;#39;&amp;#35831;&amp;#20351;&amp;#29992;vim&amp;#30340;&amp;#31227;&amp;#21160;&amp;#38190;&amp;#39;&lt;br&gt;&amp;nbsp;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while True:&lt;br&gt;&amp;nbsp;16&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; c= os.read(STDIN_FILENO, 1)&lt;br&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if c == &amp;#39;j&amp;#39;:&lt;br&gt;&amp;nbsp;18&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#19979;&amp;quot;&lt;br&gt;&amp;nbsp;19&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif c == &amp;#39;k&amp;#39;:&lt;br&gt;&amp;nbsp;20&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#19978;&amp;quot;&lt;br&gt;&amp;nbsp;21&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif c == &amp;#39;h&amp;#39;:&lt;br&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;#39;&amp;#24038;&amp;#39;&lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; elif c == &amp;#39;l&amp;#39;:&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;#39;&amp;#21491;&amp;#39;&lt;br&gt;&amp;nbsp;25 except KeyboardInterrupt, e:&lt;br&gt;&amp;nbsp;26&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; termios.tcsetattr(STDIN_FILENO, termios.TCSADRAIN, old_attr)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ffd966"&gt;&amp;#22238;&amp;#21040;ctrl_D&amp;#30340;&amp;#38382;&amp;#39064;&lt;/b&gt;&lt;br&gt;&amp;#22312;terminal IO&amp;#37324;, &amp;#22240;&amp;#20026;&lt;font color="#ff0000"&gt;&amp;#40664;&amp;#35748;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#32531;&amp;#23384;&amp;#30340;&lt;/font&gt;, &amp;#36171;&amp;#20110;ctrl_D&amp;#20004;&amp;#31181;&amp;#21151;&amp;#33021;:&lt;br&gt;&amp;nbsp;1. &amp;#30456;&amp;#24403;&amp;#20110;flush&amp;#25805;&amp;#20316;.&amp;nbsp; &amp;#21363;&amp;#26102;&amp;#25226;&amp;#36755;&amp;#20837;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#36820;&amp;#22238;&amp;#32473;read&amp;#20989;&amp;#25968;&amp;#65292; &amp;#19981;&amp;#29992;&amp;#31561;&amp;#24453;&amp;#39;\n&amp;#39;&amp;#30340;&amp;#20986;&amp;#29616;&amp;#12290;&lt;br&gt;&amp;nbsp;2. &amp;#35753;tty&amp;#36820;&amp;#22238;0&amp;#23383;&amp;#33410;&amp;#32473;read&amp;#20989;&amp;#25968;. &amp;#34920;&amp;#31034;EOF&amp;#12290; &amp;#22312;&amp;#21333;&amp;#29420;&amp;#36755;&amp;#20837;ctrl_D&amp;#21518;&amp;#20135;&amp;#29983;&amp;#36825;&amp;#31181;&amp;#25928;&amp;#26524;&lt;br&gt;&lt;br&gt;&lt;b style="background-color:#ffd966"&gt;&amp;#25511;&amp;#21046;&amp;#31526;&lt;/b&gt;&lt;font style="background-color:#ffd966"&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/font&gt;&amp;nbsp; &lt;br&gt;&amp;#25511;&amp;#21046;&amp;#31526;&amp;#37117;&amp;#26159;tty&amp;#39537;&amp;#21160;&amp;#25552;&amp;#20379;&amp;#30340;&amp;#19968;&amp;#31181;&amp;#26041;&amp;#20415;&amp;#21151;&amp;#33021;&amp;#65292; &amp;#26377;&amp;#23569;&amp;#37327;&amp;#30340;&amp;#25511;&amp;#21046;&amp;#31526;&amp;#20250;&amp;#20135;&amp;#29983;signal&amp;#30340;&amp;#65306;&lt;br&gt;^Z&amp;#21644;^C&lt;br&gt;&amp;#36824;&amp;#26377;&amp;#23569;&amp;#37327;&amp;#30340;&amp;#26159;&amp;#26080;&amp;#27861;&amp;#20462;&amp;#25913;&amp;#30340;&amp;#65306;&lt;br&gt;\r&amp;#21644;\n&lt;br&gt;&lt;br&gt;&amp;#22914;&amp;#19979;&amp;#20195;&amp;#30721;&amp;#25226;&amp;ldquo;a&amp;ldquo;&amp;#20316;&amp;#20026;backspace&amp;#21151;&amp;#33021;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp; 1 #coding:utf-8&lt;br&gt;&amp;nbsp; 2 import os&lt;br&gt;&amp;nbsp; 3 import sys&lt;br&gt;&amp;nbsp; 4 import termios&lt;br&gt;&amp;nbsp; 5 &lt;br&gt;&amp;nbsp; 6 STDIN_FILENO = sys.stdin.fileno()&lt;br&gt;&amp;nbsp; 7 &lt;br&gt;&amp;nbsp; 8 old_attr = termios.tcgetattr(STDIN_FILENO)&lt;br&gt;&amp;nbsp; 9 new_attr = termios.tcgetattr(STDIN_FILENO)&lt;br&gt;&amp;nbsp;10 &lt;br&gt;&amp;nbsp;11 new_attr[6][termios.VERASE] = 0x61&lt;br&gt;&amp;nbsp;12 termios.tcsetattr(STDIN_FILENO, termios.TCSADRAIN, new_attr)&lt;br&gt;&amp;nbsp;13 try:&lt;br&gt;&amp;nbsp;14&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;&amp;#35831;&amp;#20351;&amp;#29992;a&amp;#38190;&amp;#21024;&amp;#38500;&amp;#25968;&amp;#25454;&amp;quot;&lt;br&gt;&amp;nbsp;15&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.read(0,100)&lt;br&gt;&amp;nbsp;16 except KeyboardInterrupt, e:&lt;br&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; termios.tcsetattr(STDIN_FILENO, termios.TCSADRAIN, old_attr)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4102382548892769136?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4102382548892769136/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/07/io.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4102382548892769136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4102382548892769136'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/07/io.html' title='IO笔记'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5744519955034892305</id><published>2010-06-23T10:56:00.001-07:00</published><updated>2010-06-23T10:56:45.250-07:00</updated><title type='text'>无线网络配置</title><content type='html'>&amp;#24635;&amp;#26159;&amp;#26377;&amp;#19968;&amp;#31181;&amp;#24618;&amp;#24863;&amp;#35273;&amp;#65306; &amp;#19981;&amp;#33021;&amp;#22826;&amp;#20381;&amp;#36182;GUI&amp;#31243;&amp;#24207;&amp;#12290;&lt;div&gt;&amp;#22312;&amp;#25105;&amp;#30340;&amp;#35760;&amp;#24518;&amp;#20013;&amp;#65292; &amp;#36824;&amp;#26159;&amp;#23384;&amp;#22312;&amp;#30528;&amp;#19968;&amp;#31181;&amp;#22330;&amp;#38754;&amp;#65306;&amp;#31995;&amp;#32479;&amp;#26080;&amp;#27861;&amp;#27491;&amp;#24120;&amp;#36827;&amp;#20837;X&amp;#32780;&amp;#26080;&amp;#27861;&amp;#27491;&amp;#24120;&amp;#20351;&amp;#29992;linux&amp;#30340;&amp;#30171;&amp;#33510;&amp;#35760;&amp;#24518;&amp;#12290;&amp;#24635;&amp;#26159;&amp;#24863;&amp;#35273;GUI&amp;#26159;&amp;#23398;&amp;#20064;&amp;#20351;&amp;#29992;linux&amp;#30340;&amp;#25318;&amp;#36335;&amp;#34382;&amp;#12290;&lt;div&gt;&amp;#25152;&amp;#20197;&amp;#19968;&amp;#33324;&amp;#24773;&amp;#20917;&amp;#19979;&amp;#65292; &amp;#25105;&amp;#37117;&amp;#26159;CLI&amp;#31243;&amp;#24207;&amp;#34892;&amp;#20808;&amp;#30340;&amp;#12290;&amp;#36825;&amp;#20063;&amp;#26159;&amp;#38450;&amp;#27490;&amp;#20986;&amp;#29616;&amp;#25105;&amp;#24456;&amp;#19981;&amp;#21916;&amp;#27426;&amp;#30340;&amp;#24863;&amp;#35273;&amp;#12290;&lt;/div&gt;&lt;br&gt;&amp;#32593;&amp;#32476;&amp;#29031;&amp;#26679;&amp;#26159;CLI&amp;#34892;&amp;#20808;&amp;#12290;&amp;#20043;&amp;#21069;&amp;#25105;&amp;#30340;router&amp;#26159;&amp;#37197;&amp;#32622;&amp;#25104;WEP&amp;#30340;&amp;#65292; &amp;#37117;&amp;#26159;&amp;#20351;&amp;#29992;wireless-tools&amp;#24037;&amp;#20855;&amp;#38598;&amp;#21487;&amp;#20197;&amp;#24456;&amp;#22909;&amp;#22788;&amp;#29702;&amp;#12290; &amp;#20294;&amp;#26159;&amp;#24930;&amp;#24930;&amp;#22320;&amp;#65292; &amp;#36825;&amp;#31181;&amp;#21152;&amp;#23494;&amp;#32593;&amp;#32476;&amp;#24050;&amp;#32463;&amp;#34987;&amp;#28120;&amp;#27760;&amp;#20102;&amp;#12290; WEP&amp;#36880;&amp;#28176;&amp;#20986;&amp;#30340;&amp;#26102;&amp;#65292; WPA&amp;#27969;&amp;#34892;&amp;#36215;&amp;#26469;&amp;#65292;&amp;#21516;&amp;#26102;linux&amp;#20063;&amp;#20135;&amp;#29983;&amp;#20102;&amp;#26032;&amp;#30340;&amp;#19968;&amp;#22871;wireless&amp;#37197;&amp;#32622;&amp;#26426;&amp;#21046;&amp;#65306;nl80211. &amp;nbsp;&amp;#36825;&amp;#26159;&amp;#20026;&amp;#20160;&amp;#20040;wireless-tools&amp;#24037;&amp;#20855;&amp;#38598;&amp;#26080;&amp;#27861;&amp;#20351;&amp;#29992;WPA&amp;#32593;&amp;#32476;&amp;#30340;&amp;#21407;&amp;#22240;&lt;div&gt;&amp;nbsp;* &amp;#20851;&amp;#20110;wireless-tools&amp;#20351;&amp;#29992;&amp;#30340;WE&amp;#65306;&amp;nbsp;&lt;a href="http://linuxwireless.org/en/developers/Documentation/Wireless-Extensions"&gt;http://linuxwireless.org/en/developers/Documentation/Wireless-Extensions&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://linuxwireless.org/en/developers/Documentation/Wireless-Extensions"&gt;&lt;/a&gt;&amp;#20351;&amp;#29992;WPA&amp;#26080;&amp;#32447;&amp;#29616;&amp;#22312;&amp;#19968;&amp;#33324;&amp;#26159;&amp;#20351;&amp;#29992;wpa_supplicant&amp;#24037;&amp;#20855;&lt;/div&gt;&lt;div&gt;&amp;nbsp;* &amp;#20851;&amp;#20110;nl80211&amp;#30340;&amp;#65306;&amp;nbsp;&lt;a href="http://linuxwireless.org/en/developers/Documentation/nl80211"&gt;http://linuxwireless.org/en/developers/Documentation/nl80211&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;a href="http://linuxwireless.org/en/developers/Documentation/nl80211"&gt;&lt;/a&gt;&amp;#20351;&amp;#29992;CLI&amp;#24037;&amp;#20855;&amp;#26368;&amp;#28902;&amp;#23601;&amp;#26159;&amp;#38656;&amp;#35201;&amp;#22810;&amp;#25163;&amp;#21160;&amp;#12290; &amp;#22797;&amp;#26434;&amp;#30340;&amp;#24037;&amp;#20855;&amp;#36824;&amp;#38656;&amp;#35201;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#20854;&amp;#23454;&amp;#36825;&amp;#37117;&amp;#26159;&amp;#19968;&amp;#27425;&amp;#24615;&amp;#30340;&amp;#65292; &amp;#22240;&amp;#20026;&amp;#26377;&amp;#33050;&amp;#26412;&amp;#30340;&amp;#23384;&amp;#22312;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#25105;&amp;#20063;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#25042;&amp;#20154;&amp;#65374;&amp;#65374;&amp;#65374;&amp;#35841;&amp;#37117;&amp;#19981;&amp;#24819;&amp;#27599;&amp;#27425;&amp;#37117;&amp;#25630;&amp;#21313;&amp;#20960;&amp;#38047;&amp;#25165;&amp;#19978;&amp;#24471;&amp;#20102;&amp;#32593;&amp;#12290;&amp;#21629;&amp;#20196;&amp;#36824;&amp;#26159;&amp;#27604;&amp;#36739;&amp;#22909;&amp;#21150;&amp;#65292; &amp;#23601;&amp;#40635;&amp;#28902;&amp;#30340;&amp;#26159;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#65292; wpa_supplicant&amp;#30340;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#20063;&amp;#19981;&amp;#26159;&amp;#30465;&amp;#27833;&amp;#30340;&amp;#12290;&lt;/div&gt;&lt;br&gt;&amp;#29305;&amp;#21035;&amp;#26159;&amp;#22312;&amp;#27809;&amp;#32593;&amp;#32476;&amp;#65292;&amp;#19981;&amp;#33021;google&amp;#30340;&amp;#26102;&amp;#20505;&amp;#26356;&amp;#26159;&amp;#26080;&amp;#22856;&amp;#12290; &amp;#23545;&amp;#65281;&amp;#36825;&amp;#31181;&amp;ldquo;&amp;#26080;&amp;#22856;&amp;rdquo;&amp;#26159;&amp;#25105;&amp;#26368;&amp;#19981;&amp;#21916;&amp;#27426;&amp;#30475;&amp;#21040;&amp;#30340;&amp;#65281; &amp;#25105;&amp;#24456;&amp;#35752;&amp;#21388;&amp;#36825;&amp;#31181;&amp;#24863;&amp;#35273;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#30456;&amp;#20449;&amp;#35299;&amp;#20915;&amp;#30340;&amp;#26041;&amp;#27861;&amp;#26159;&amp;#19968;&amp;#23450;&amp;#20250;&amp;#23384;&amp;#22312;&amp;#30340;&amp;#65374;&amp;#65374;&amp;#65374;&amp;#65374;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;ldquo;&amp;#23601;&amp;#22320;&amp;#20986;&amp;#26448;&amp;rdquo;&amp;#26159;&amp;#19968;&amp;#26465;&amp;#20986;&amp;#36335;&amp;#65292; &amp;#21363;&amp;#65306;&amp;#19981;&amp;#32852;&amp;#32593;&amp;#20063;&amp;#21487;&amp;#37197;&amp;#32622;wpa_supplicant&amp;#65281;&lt;/div&gt;&lt;div&gt;copy&amp;#26159;&amp;#26041;&amp;#27861;&amp;#65292; How ? &amp;#20174;wpa_supplicant&amp;#30340;man&amp;#37324;copy&amp;#20986;&amp;#21487;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#26469;&amp;#12290;&lt;/div&gt;&lt;div&gt;&amp;#22312;man 5 wpa_supplicant&amp;#37324;&amp;#30475;&amp;#21040;&amp;#65306; Catch all example that allows more or less all configuration modes.&lt;/div&gt;&lt;br&gt;&amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#24050;&amp;#32463;&amp;#35299;&amp;#20915;&amp;#20102;&amp;#65292; &amp;#19981;&amp;#23384;&amp;#22312;&amp;#26159;&amp;#21542;&amp;#26377;google&amp;#12290;&amp;#20063;&amp;#19981;&amp;#23384;&amp;#22312;&amp;#26159;&amp;#21542;&amp;#26377;Networking-manager&amp;#12290; &amp;#65288;&amp;#21487;&amp;#20197;&amp;#30452;&amp;#22868;&amp;#21487;&amp;#29233;&amp;#30340;gentoo&amp;#19990;&amp;#30028;&amp;#65289;&lt;br&gt;&amp;#25226;&amp;#37197;&amp;#32622;copy&amp;#20986;&amp;#26469;&amp;#65292; &amp;#25353;&amp;#23454;&amp;#29616;&amp;#24773;&amp;#20917;&amp;#20462;&amp;#25913;&amp;#65292; &amp;#21435;&amp;#25481;&amp;#19981;&amp;#29992;&amp;#30340;&amp;#65292; psk&amp;#20351;&amp;#29992;wpa_passphrase&amp;#24471;&amp;#21040;&amp;#12290; &amp;#19968;&amp;#20999;&amp;#37117;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#38382;&amp;#39064;&amp;#30340;&lt;div&gt;* &amp;#22914;&amp;#26524;&amp;#36825;&amp;#19968;&amp;#27493;&amp;#26080;&amp;#27861;&amp;#20570;&amp;#21040;&amp;#65292; &amp;#36824;&amp;#26159;&amp;#21435;&amp;#20351;&amp;#29992;GUI&amp;#21543;&amp;#65292; &amp;#25110;&amp;#32773;&amp;#26159;&amp;#24605;&amp;#32771;&amp;#19968;&amp;#19979;&amp;#38382;&amp;#39064;&amp;#20986;&amp;#22312;&amp;#21738;&amp;#37324;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;============= &amp;#21326;&amp;#20029;&amp;#30340;&amp;#20998;&amp;#38548;&amp;#32447; ===================&lt;br&gt;&lt;br&gt;&amp;#19979;&amp;#38754;&amp;#26159;N&amp;#20037;&amp;#22312;docs&amp;#37324;&amp;#23384;&amp;#25918;&amp;#30340;&amp;#25991;&amp;#23383;&amp;#65292; &amp;#38543;&amp;#20415;&amp;#19968;&amp;#36215;&amp;#25918;&amp;#20986;&amp;#65306;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#35745;&amp;#31639;&amp;#26426;&amp;#30340;&amp;#32593;&amp;#32476;&amp;#26159;&amp;#26368;&amp;#24120;&amp;#35265;&amp;#30340;&amp;#37197;&amp;#32622;&amp;#20102;&amp;#12290;&amp;#26469;&amp;#21040;&amp;#21271;&amp;#20140;&amp;#36825;&amp;#36793;&amp;#12290;&amp;#26379;&amp;#21451;&amp;#30340;&amp;#23487;&amp;#33293;&amp;#37324;&amp;#30340;&amp;#32593;&amp;#32476;&amp;#21644;&amp;#24191;&amp;#19996;&amp;#30340;&amp;#19981;&amp;#19968;&amp;#26679;&amp;#65306;&lt;/div&gt;&lt;div&gt;1. &amp;#19968;&amp;#20010;&amp;#23487;&amp;#33293;&amp;#21482;&amp;#26377;&amp;#20960;&amp;#21488;&amp;#35745;&amp;#31639;&amp;#26426;&amp;#19978;&amp;#32593;&amp;#12290;&lt;/div&gt;&lt;div&gt;2. &amp;#21487;&amp;#20197;&amp;#19978;&amp;#32593;&amp;#30340;&amp;#26426;&amp;#22120;&amp;#37117;&amp;#34987;&amp;#30331;&amp;#35760;MAC&amp;#22320;&amp;#22336;&amp;#12290;&lt;/div&gt;&lt;div&gt;3. &amp;#21487;&amp;#20197;&amp;#19978;&amp;#32593;&amp;#30340;&amp;#26426;&amp;#22120;&amp;#37117;&amp;#20998;&amp;#26377;&amp;#22266;&amp;#23450;&amp;#30340;IP&amp;#65292; netmask, DNS, gateway&lt;/div&gt;&lt;div&gt;4. &amp;#38656;&amp;#35201;web&amp;#30331;&amp;#38470;&amp;#35748;&amp;#35777;&amp;#26041;&amp;#21487;&amp;#20351;&amp;#29992;&amp;#32593;&amp;#32476;&amp;#12290;&lt;/div&gt;&lt;div&gt;5. WEP&amp;#26041;&amp;#24335;&lt;/div&gt;&lt;br&gt;&amp;#20854;&amp;#23454;&amp;#23601;&amp;#26159;MAC&amp;#30340;&amp;#38480;&amp;#21046; &amp;#65291; web&amp;#30331;&amp;#38470;&amp;#35748;&amp;#35777;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#36824;&amp;#26159;&amp;#24456;&amp;#31649;&amp;#29992;&amp;#30340;&amp;#12290; &amp;#33267;&amp;#23569;&amp;#24066;&amp;#22330;&amp;#21334;&amp;#30340;&amp;#36335;&amp;#30001;&amp;#27809;&amp;#26377;&amp;#38024;&amp;#23545;&amp;#36825;&amp;#19968;&amp;#31995;&amp;#32479;&amp;#30340;web&amp;#30331;&amp;#38470;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#20026;&amp;#20102;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#26426;&amp;#22120;&amp;#21487;&amp;#20197;&amp;#19978;&amp;#32593;&amp;#12290;&amp;#21482;&amp;#38656;&amp;#35201;&amp;#28385;&amp;#36275;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#26465;&amp;#20214;&amp;#21363;&amp;#21487;&amp;#12290;&amp;nbsp;&lt;div&gt;&amp;#38024;&amp;#23545;&amp;#20110;&amp;#26377;&amp;#32447;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#65306;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style="background-color:#93c47d"&gt;ifconfig eth1 hw ether 00:1e:65:18:e2:a8&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#93c47d"&gt;ifconfig eth1 10.3.52.132 netmask 255.255.255.0&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#93c47d"&gt;route add default gw 10.3.52.1&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&amp;#28982;&amp;#21518;&amp;#20351;&amp;#29992;browser&amp;#35775;&amp;#38382;web&amp;#35748;&amp;#35777;&amp;#21363;&amp;#21487;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#26377;&amp;#32447;&amp;#30340;&amp;#20498;&amp;#24456;&amp;#28165;&amp;#26970;&amp;#24590;&amp;#20040;&amp;#35299;&amp;#20915;&amp;#23427;&amp;#12290; &amp;#26080;&amp;#32447;&amp;#21602;&amp;#65311; &amp;#20063;&amp;#24456;&amp;#31616;&amp;#21333;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#38024;&amp;#23545;&amp;#20110;&amp;#26080;&amp;#32447;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#65288;&amp;#26159;WEP&amp;#32593;&amp;#32476;&amp;#65289;&amp;#65306;&lt;/div&gt;&lt;div&gt;$ sudo ifconfig wlan0 hw ether xxxxxxxx&lt;/div&gt;&lt;div&gt;$ sudo iwlist wlan0 scan&lt;/div&gt;&lt;div&gt;&amp;#21487;&amp;#20197;&amp;#24471;&amp;#21040;ssid&amp;#21517;&amp;#65374;&amp;#65374;&lt;/div&gt;$ sudo iwconfig wlan0 ssid &amp;#39;who&amp;#39; key &amp;#39;password&amp;#39;&lt;/div&gt;$ sudo route add default gw 10.3.52.1&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5744519955034892305?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5744519955034892305/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/06/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5744519955034892305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5744519955034892305'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/06/blog-post.html' title='无线网络配置'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-9001826151707652344</id><published>2010-06-21T21:04:00.001-07:00</published><updated>2010-06-21T21:04:24.009-07:00</updated><title type='text'>由setrlimit引发的学习</title><content type='html'>&amp;nbsp;&lt;br&gt;POSIX&amp;#26631;&amp;#20934;&amp;#20013;&amp;#26377;&amp;#36825;&amp;#26679;&amp;#19968;&amp;#20010;&amp;#20989;&amp;#25968;: sysconf(3).&amp;nbsp; &amp;#33258;&amp;#24049;&amp;#20889;&amp;#20102;&amp;#23567;&amp;#27573;&amp;#20195;&amp;#30721;&amp;#65306;&lt;br&gt;&lt;br&gt;&amp;nbsp;19 #include &amp;lt;unistd.h&amp;gt;&lt;br&gt;&amp;nbsp;20 #include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&amp;nbsp;21 &lt;br&gt;&amp;nbsp;22 int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int fd_max_number = sysconf(_SC_OPEN_MAX);&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%d\n&amp;quot;, fd_max_number);&lt;br&gt;&amp;nbsp;25 &lt;br&gt;&amp;nbsp;26 }&lt;br&gt;&lt;br&gt;&amp;#20351;&amp;#29992;strace&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#23427;&amp;#20854;&amp;#23454;&amp;#26159;&amp;#35843;&amp;#29992;&amp;#20102;getrlimit(2), &lt;br&gt;&amp;#20160;&amp;#20040;limit? &amp;#20840;&amp;#31216;&amp;#20026; resource limit. &amp;#36825;&amp;#26159;kernel&amp;#20998;&amp;#32473;&amp;#27599;&amp;#20010;&amp;#36827;&amp;#31243;&amp;#29420;&amp;#31435;&amp;#30340;&amp;#19968;&amp;#32452;&amp;#25968;&amp;#25454;&amp;#12290;&amp;#20195;&amp;#34920;&amp;#20102;&amp;#36827;&amp;#31243;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#26368;&amp;#22823;resource&amp;#19978;&amp;#38480;&amp;#12290;&amp;#20855;&amp;#20307;&amp;#26377;&amp;#21738;&amp;#20123;&amp;#65292; &amp;#21487;&amp;#20197;&amp;#35265;getrlimit(2)&amp;#30340;manual&lt;br&gt;&lt;br&gt;kernel&amp;#20063;&amp;#26377;&amp;#19968;&amp;#22534;limit&amp;#21442;&amp;#25968;&amp;#65292; &amp;#20351;&amp;#29992;sysctl(2)&amp;#26469;&amp;#20462;&amp;#25913;&amp;#65292; kernel&amp;#30340;limit&amp;#24212;&amp;#35813;&amp;#34987;&amp;#31216;&amp;#20026;&amp;quot;limit of limits&amp;quot;&amp;#12290; &lt;br&gt;&lt;br&gt;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#26377;&amp;#20851;&amp;#20110;&amp;#25991;&amp;#20214;&amp;#25551;&amp;#36848;&amp;#31526;&amp;#30340;limit:&lt;br&gt;&amp;nbsp;* http://www.karakas-online.de/forum/viewtopic.php?t=9834&lt;br&gt;&amp;nbsp;* &amp;#20854;&amp;#20013;&amp;#25552;&amp;#21040;&amp;#19968;&amp;#28857;&amp;#24456;&amp;#26377;&amp;#24847;&amp;#20041;&amp;#65306;file descriptor&amp;#19982;open file&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#20102;&amp;#35299;setrlimit(2)&amp;#37197;&amp;#32622;file descriptor&amp;#26102;&amp;#65292; &amp;#26377;&amp;#19968;&amp;#20010;&amp;#25991;&amp;#20214;&amp;#24341;&amp;#36215;&amp;#20102;&amp;#25105;&amp;#30340;&amp;#39640;&amp;#24230;&amp;#27880;&amp;#24847;&amp;#65306;&lt;br&gt;&lt;span class="postbody"&gt;/etc/security/limits.conf&lt;/span&gt;&lt;br&gt;&lt;br&gt;&amp;#30097;&amp;#38382;&amp;#65306; &lt;br&gt;1. setrlimit&amp;#26159;system call&amp;#65292; &amp;#20026;&amp;#20160;&amp;#20040;&amp;#20250;&amp;#20351;&amp;#29992;&amp;#36825;&amp;#26679;&amp;#19968;&amp;#20010;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#30340;&amp;#65311;&lt;br&gt;2. limits.conf&amp;#26159;pam_limits module&amp;#30340;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#65292; &amp;#22914;&amp;#26524;&amp;#29992;&amp;#25143;&amp;#19981;&amp;#21152;&amp;#36733;&amp;#27492;module&amp;#26102;&amp;#65292;kernel&amp;#30340;setrlimit&amp;#21448;&amp;#26159;&amp;#22788;&amp;#29702;&amp;#30340;&amp;#65311;&lt;br&gt;&lt;br&gt;&amp;#19981;&amp;#35299;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;&amp;#65292; &amp;#22312;kernel&amp;#30340;&amp;#28304;&amp;#20195;&amp;#30721;&amp;#22534;&amp;#37324;&amp;#32416;&amp;#32467;&amp;#26102;&amp;#65292; &amp;#21457;&amp;#29616;&amp;#20102;&amp;#19968;&amp;#20010;&amp;#24120;&amp;#24120;&amp;#20250;&amp;#30475;&amp;#21040;&amp;#30340;&amp;#19968;&amp;#20010;&amp;#35789;&amp;#65306;SELinux&lt;br&gt;FAQ&amp;#20102;&amp;#19968;&amp;#25226;&amp;#65292; &amp;#24471;&amp;#30693;SELinux&amp;#26159;&amp;#22312;kernel&amp;#37324;&amp;#21152;&amp;#20837;&amp;#22797;&amp;#26434;&amp;#30340;access control&amp;#12290;&amp;#27604;&amp;#22914;role-based access control&lt;br&gt;&lt;br&gt;&amp;#30097;&amp;#38382;&amp;#21448;&amp;#26469;&amp;#20102;&amp;#65306; Linux&amp;#26159;&amp;#19968;&amp;#20010;&amp;#21487;&amp;#39640;&amp;#24230;&amp;#35009;&amp;#21098;(scale)&amp;#30340;&amp;#31995;&amp;#32479;&amp;#65292; &amp;#22914;&amp;#20309;&amp;#20570;&amp;#21040;&amp;#21435;&amp;#25481;Linux Security Modules&amp;#21487;&amp;#20197;&amp;#19981;&amp;#24433;&amp;#21709;&amp;#29616;&amp;#26377;&amp;#30340;system call&amp;#30340;&amp;#21602;&amp;#65311;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#20854;&amp;#20013;&amp;#30340;&amp;#26426;&amp;#21046;&amp;#27604;&amp;#36739;&amp;#21560;&amp;#24341;&amp;#25105;&amp;#12290; google&amp;#20102;&amp;#19968;&amp;#25226;&amp;#65292; &amp;#24471;&amp;#21040;&amp;#19968;&amp;#31687;&amp;#22909;&amp;#25991;&amp;#65292; &amp;#20998;&amp;#20139;&amp;#65306;&lt;br&gt;&amp;nbsp;* http://www.ibm.com/developerworks/linux/library/l-selinux/&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-9001826151707652344?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/9001826151707652344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/06/setrlimit.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9001826151707652344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9001826151707652344'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/06/setrlimit.html' title='由setrlimit引发的学习'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2438923447539583635</id><published>2010-06-09T20:31:00.001-07:00</published><updated>2010-06-09T20:33:40.828-07:00</updated><title type='text'>系统里的hostname</title><content type='html'>1. &amp;#20462;&amp;#25913;host name&amp;#38656;&amp;#35201;reboot&amp;#21527;&amp;#65311;&lt;br&gt;2. host name&amp;#19982;/etc/hosts&amp;#26377;&amp;#20160;&amp;#20040;&amp;#20851;&amp;#31995;&amp;#21602;&amp;#65311;&lt;br&gt;3. gethostname&amp;#20026;&amp;#20160;&amp;#20040;&amp;#19981;&amp;#21463;/etc/nsswitch.conf&amp;#30340;&amp;#37197;&amp;#32622;&amp;#65311;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#19977;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#22312;&amp;#19981;&amp;#20102;&amp;#35299;host name&amp;#26159;&amp;#20160;&amp;#20040;&amp;#30340;&amp;#26102;&amp;#20505;, &amp;#27604;&amp;#36739;&amp;#32416;&amp;#32467;.&lt;br&gt;&lt;br&gt;&amp;#26159;&amp;#21542;&amp;#35201;reboot&amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#26159;&amp;#26368;&amp;#30452;&amp;#25509;&amp;#35753;&amp;#25105;&amp;#20135;&amp;#29983;dig&amp;#36825;&amp;#20010;host name&amp;#30340;&amp;#21160;&amp;#21147;, &amp;#36824;&amp;#26377;&amp;#23601;&amp;#26159;&amp;#24037;&amp;#20316;&amp;#20013;, &amp;#30896;&amp;#21040;&amp;#19968;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#26080;&amp;#27861;&amp;#20351;&amp;#29992;sudo&amp;#21629;&amp;#20196;, &amp;#20110;&amp;#26159;&amp;#33457;&amp;#26102;&amp;#38388;&amp;#23398;&amp;#20064;&amp;#23398;&amp;#20064;.&lt;br&gt;&lt;br&gt;&amp;#24179;&amp;#26102;&amp;#30475;hostname(3)&amp;#26102;, &amp;#21457;&amp;#29616;hostname(3)&amp;#19982;/etc/nsswitch.conf&amp;#25199;&amp;#22312;&amp;#19968;&amp;#36215;, &amp;#36825;&amp;#20351;host name&amp;#19982;DNS&amp;#20013;&amp;#30340;&amp;#35760;&amp;#24405;&amp;#32416;&amp;#32467;&amp;#22312;&amp;#19968;&amp;#36215;. &amp;#26356;&amp;#26159;&amp;#24076;&amp;#26395;&amp;#20102;&amp;#35299;&amp;#20043;&amp;#38388;&amp;#30340;&amp;#20851;&amp;#31995;&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#25214;&amp;#36164;&amp;#26009;&amp;#30340;&amp;#36807;&amp;#31243;&amp;#20013;, &amp;#26412;&amp;#20154;&amp;#21457;&amp;#29616;&amp;#20102;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#26377;&amp;#24847;&amp;#24605;&amp;#30340;&amp;#26041;&amp;#27861;:&lt;br&gt;&amp;nbsp;* Linux kernel&amp;#19982;GNU&amp;#20998;&amp;#24320;.&lt;br&gt;&amp;#20160;&amp;#20040;&amp;#24847;&amp;#24605;&amp;#21602;? &amp;#20998;&amp;#30028;&amp;#26159;&amp;#20026;&amp;#20102;&amp;#25226;&amp;#19981;&amp;#21516;&amp;#26102;&amp;#26399;&amp;#30340;&amp;#20135;&amp;#29289;, &amp;#27010;&amp;#24565;&amp;#20043;&amp;#31867;&amp;#30340;&amp;#20998;&amp;#24320;. &amp;#27604;&amp;#22914;: &amp;#24403;&amp;#20320;&amp;#35748;host name&amp;#26159;kernel&amp;#30340;&amp;#19968;&amp;#20010;&amp;#21464;&amp;#37327;&amp;#26102;, &amp;#37027;&amp;#20040;&amp;#23427;&amp;#23601;&amp;#19982;DNS&amp;#20013;&amp;#30340;&amp;#35760;&amp;#24405;&amp;#26377;&amp;#26126;&amp;#26174;&amp;#30340;&amp;#19981;&amp;#21516;.&lt;br&gt;&lt;br&gt;gethostname&amp;#26159;system call, &amp;#23427;&amp;#19981;&amp;#26159;glibc&amp;#30340;&amp;#19996;&amp;#35199;, &amp;#25152;&amp;#20197;&amp;#23427;&amp;#19982;glibc&amp;#20013;&amp;#30340;DNS&amp;#26597;&amp;#35810;&amp;#26426;&amp;#21046;(/etc/nsswitch.conf)&amp;#26159;&amp;#25199;&amp;#19981;&amp;#19978;&amp;#20851;&amp;#31995;&amp;#30340;. gethostbyname, gethostbyaddr&amp;#37117;&amp;#26159;glibc&amp;#30340;&amp;#19996;&amp;#35199;&lt;br&gt;&lt;br&gt;&amp;#23601;&amp;#31639;&amp;#27809;&amp;#26377;glibc&amp;#30340;&amp;#23384;&amp;#22312;, kernel&amp;#20013;&amp;#30340;host name&amp;#29031;&amp;#26679;&amp;#23384;&amp;#22312;!&lt;br&gt;&lt;br&gt;&amp;#25353;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#26041;&amp;#27861;, &amp;#24050;&amp;#32463;&amp;#21487;&amp;#20197;&amp;#24456;&amp;#28165;&amp;#26970;&amp;#22320;&amp;#30693;&amp;#36947;host name&amp;#19982;/etc/hosts, /etc/nsswitch.conf&amp;#26159;&amp;#27809;&amp;#26377;&amp;#20851;&amp;#31995;&amp;#30340;.&lt;br&gt;&lt;br&gt;linux kernel&amp;#25552;&amp;#20379;&amp;#20102;&amp;#23454;&amp;#26102;&amp;#20462;&amp;#25913;kernel&amp;#21442;&amp;#25968;&amp;#30340;&amp;#26041;&amp;#27861;, &amp;#26159;&amp;#26080;&amp;#38656;&amp;#35201;reboot&amp;#20869;&amp;#26680;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#29983;&amp;#25928;&amp;#30340;.&amp;nbsp; &amp;#22914;sysctl(2), &amp;#20063;&amp;#26377;CLI&amp;#30340;sysctl(3). &amp;#20063;&amp;#21487;&amp;#20197;&amp;#20462;&amp;#25913;/proc/sys/kernel&amp;#19979;&amp;#30340;&amp;#25991;&amp;#20214;.&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#23454;&amp;#38469;&amp;#20013;, GNU&amp;#36719;&amp;#20214;&amp;#21448;&amp;#24120;&amp;#24120;&amp;#20250;&amp;#20351;&amp;#29992;&amp;#21040;host name! &lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#24037;&amp;#20316;&amp;#20013;&amp;#30896;&amp;#21040;&amp;#19968;&amp;#20010;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#38382;&amp;#39064;: &amp;#27599;&amp;#24403;&amp;#36816;&amp;#34892;sudo&amp;#26102;shell&amp;#23601;hang&amp;#20303;!&lt;br&gt;&amp;#23427;&amp;#34987;block&amp;#20102;&amp;#21527;?&lt;br&gt;&amp;#20110;&amp;#26159;&amp;#20351;&amp;#29992;strace&amp;#19968;&amp;#26597;, sudo&amp;#26159;&amp;#22312;&amp;#31561;socket&amp;#30340;IO. &amp;#21457;&amp;#29616;&amp;#36825;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#30340;DNS&amp;#35531;&amp;#27714;&amp;#26159;&amp;#21457;&amp;#19981;&amp;#20986;&amp;#21435;&amp;#30340;&lt;br&gt;&lt;br&gt;&amp;#20026;&amp;#20160;&amp;#20040;sudo&amp;#38656;&amp;#35201;&amp;#20351;&amp;#29992;&amp;#32593;&amp;#32476;&amp;#21602;?&lt;br&gt;&amp;#36825;&amp;#20854;&amp;#23454;&amp;#23601;&amp;#26159;&amp;#31243;&amp;#24207;&amp;#26399;&amp;#26395;&amp;#24471;&amp;#21040;FQDN&amp;#26684;&amp;#24335;&amp;#30340;host name&amp;#30340;&amp;#32080;&amp;#26524;.&lt;br&gt;&lt;b&gt;&amp;#24471;&amp;#21040;FQDN&amp;#26684;&amp;#24335;&amp;#30340;host name&amp;#23601;&amp;#20351;&amp;#24471;host&amp;nbsp; name&amp;#19982;DNS&amp;#26597;&amp;#35810;&amp;#32416;&amp;#32467;&amp;#22312;&amp;#19968;&amp;#36215;.&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;#36890;&amp;#36807;&amp;#23398;&amp;#20064;hostname&amp;#21629;&amp;#20196;&amp;#30340;&amp;#20195;&amp;#30721;, &amp;#21487;&amp;#20197;&amp;#24471;&amp;#21040;hostname -f&amp;#20854;&amp;#23454;&amp;#26159;&amp;#31561;&amp;#21516;&amp;#20110;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#20195;&amp;#30721;&lt;br&gt;#include &amp;lt;unistd.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;netdb.h&amp;gt;&lt;br&gt;&lt;br&gt;int main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char hostname[64];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( gethostname( hostname, sizeof(hostname) ) != 0){ &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;1&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; struct hostent * host_struct;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ( (host_struct = gethostbyname( hostname )) == NULL ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; perror(&amp;quot;2&amp;quot;);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(&amp;quot;%s\n&amp;quot;, host_struct-&amp;gt;h_name);&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#24471;&amp;#21040;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#20449;&amp;#24687;: &lt;b&gt;&amp;#24471;&amp;#21040;FQDN&amp;#26684;&amp;#24335;&amp;#30340;host name, &amp;#26159;&amp;#38656;&amp;#35201;&amp;#20351;&amp;#29992;&amp;#21040;&lt;br&gt;1. host name&lt;br&gt;2. DNS&lt;br&gt;&amp;#36825;&amp;#23601;&amp;#19982;linux&amp;#19979;DNS&amp;#26597;&amp;#35810;&amp;#39034;&amp;#24207;&amp;#31574;&amp;#30053;&amp;#26377;&amp;#20851;&amp;#31995;(/etc/nsswitch.conf)&lt;/b&gt;&lt;br&gt;&lt;br&gt;python&amp;#37324;&amp;#26377;&amp;#19968;&amp;#27573;&amp;#24456;&amp;#26126;&amp;#20102;&amp;#30340;&amp;#20195;&amp;#30721;(&amp;#26469;&amp;#33258;socket.py):&lt;br&gt;def getfqdn(name=&amp;#39;&amp;#39;):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;quot;&amp;quot;Get fully qualified domain name from name.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; An empty argument is interpreted as meaning the local host.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; First the hostname returned by gethostbyaddr() is checked, then&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; possibly existing aliases. In case no FQDN is available, hostname&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; from gethostname() is returned.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;&amp;quot;&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = name.strip()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if not name or name == &amp;#39;0.0.0.0&amp;#39;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = gethostname()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; hostname, aliases, ipaddrs = gethostbyaddr(name)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except error:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pass&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; aliases.insert(0, hostname)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for name in aliases:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if &amp;#39;.&amp;#39; in name:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; name = hostname&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return name&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#26679;&amp;#36824;&amp;#21487;&amp;#20197;&amp;#35299;&amp;#24320;&amp;#19968;&amp;#20010;&amp;#30097;&amp;#38382;: &amp;#20026;&amp;#20160;&amp;#20040;/etc/hosts&amp;#37324;&amp;#24120;&amp;#24120;&amp;#20250;&amp;#20986;&amp;#29616;hostname&amp;#21644;&amp;#23427;&amp;#30340;FQDN&amp;#35760;&amp;#24405;&lt;br&gt;&amp;#22686;&amp;#21152;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#22312;&amp;#36825;&amp;#37324;, &amp;#26597;hostname&amp;#30340;FQDN&amp;#26102;&amp;#23601;&amp;#26080;&amp;#39035;&amp;#36890;&amp;#36807;&amp;#32593;&amp;#32476;&amp;#24471;&amp;#21040;, &amp;#24403;&amp;#28982;, &amp;#30340;&amp;#30830;&amp;#26377;&amp;#38656;&amp;#27714;&amp;#30340;&amp;#35805;, &amp;#20063;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#30340;, &amp;#22914;&amp;#26524;&amp;#29275;B&amp;#30340;&amp;#35805;, &amp;#23601;&amp;#27599;&amp;#21488;&amp;#26426;&amp;#22120;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#20840;&amp;#29699;&amp;#21807;&amp;#19968;&amp;#30340;&amp;#22495;&amp;#21517;&amp;#20063;&amp;#27809;&amp;#26377;&amp;#20154;&amp;#35828;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2438923447539583635?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2438923447539583635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/06/hostname.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2438923447539583635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2438923447539583635'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/06/hostname.html' title='系统里的hostname'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-8334334560487175434</id><published>2010-05-30T07:16:00.001-07:00</published><updated>2010-05-30T07:16:15.387-07:00</updated><title type='text'>帐号</title><content type='html'>&lt;font size="4"&gt;&lt;font style="background-color:#e69138"&gt;1. &amp;#38382;&amp;#39064;&amp;#30340;&amp;#26469;&amp;#28304;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&amp;#19968;&amp;#30452;&amp;#20197;&amp;#26469;, &amp;#37117;&amp;#26377;&amp;#19968;&amp;#31181;&amp;#38169;&amp;#35823;&amp;#30340;&amp;#35748;&amp;#20026;: &amp;#20351;&amp;#29992;useradd&amp;#22686;&amp;#21152;&amp;#24080;&amp;#21495;&amp;#21644;&amp;#37197;&amp;#32622;&amp;#22909;ssh-key&amp;#23601;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#27492;&amp;#24080;&amp;#21495;&amp;#30331;&amp;#38470; .&lt;br&gt;&amp;#23454;&amp;#29616;&amp;#19978;&amp;#19981;&amp;#22914;&amp;#27492;. &amp;#36825;&amp;#26159;&amp;#38656;&amp;#35201;usePAM&amp;#30340;&amp;#25903;&amp;#25345;. PAM&amp;#26085;&amp;#21518;&amp;#20877;&amp;#32454;&amp;#32454;&amp;#23398;&amp;#20064;, &amp;#29616;&amp;#22312;&amp;#20808;&amp;#23398;&amp;#20064;&amp;#23398;&amp;#20064;&amp;#19968;&amp;#33324;&amp;#35748;&amp;#35777;&lt;br&gt;&lt;br&gt;&amp;#20110;&amp;#26159;, &amp;#25226;login&amp;#21644;su&amp;#21629;&amp;#20196;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#32763;&amp;#20986;&amp;#26469;&amp;#30475;&amp;#30475;. &amp;#23427;&amp;#20204;&amp;#37117;&amp;#20351;&amp;#29992;&amp;#22914;&amp;#19979;&amp;#30340;&amp;#26041;&amp;#24335;:&lt;br&gt;&lt;br&gt;login(&amp;#19981;&amp;#25199;PAM)&amp;#30340;&amp;#20195;&amp;#30721;:&lt;br&gt;&amp;nbsp;798&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; pp = getpass(_(&amp;quot;Password: &amp;quot;));&lt;br&gt;&amp;nbsp;799 &lt;br&gt;&amp;nbsp;800 #&amp;nbsp; ifdef CRYPTOCARD&lt;br&gt;&amp;nbsp;801&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (strncmp(pp, &amp;quot;CRYPTO&amp;quot;, 6) == 0) {&lt;br&gt;&amp;nbsp;802&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (pwd &amp;amp;&amp;amp; cryptocard()) break;&lt;br&gt;&amp;nbsp;803&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;&amp;nbsp;804 #&amp;nbsp; endif /* CRYPTOCARD */&lt;br&gt;&amp;nbsp;805 &lt;br&gt;&amp;nbsp;806&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#b6d7a8"&gt;p = crypt(pp, salt);&lt;/font&gt;&lt;br&gt;&amp;nbsp;807&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; setpriority(PRIO_PROCESS, 0, 0);&lt;br&gt;.......&lt;br&gt;&amp;nbsp;835&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#b6d7a8"&gt;if (pwd &amp;amp;&amp;amp; !strcmp(p, pwd-&amp;gt;pw_passwd))&lt;/font&gt;&lt;br&gt;&amp;nbsp;836&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break;&lt;br&gt;&amp;nbsp;837 &lt;br&gt;&amp;nbsp;838&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf(_(&amp;quot;Login incorrect\n&amp;quot;));&lt;br&gt;&lt;br&gt;su&amp;#30340;&amp;#20195;&amp;#30721;:&lt;br&gt;265&amp;nbsp;&amp;nbsp; unencrypted = getpass (_(&amp;quot;Password:&amp;quot;));&lt;br&gt;266&amp;nbsp;&amp;nbsp; if (!unencrypted)&lt;br&gt;267&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;268&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#ea9999"&gt;error (0, 0, _(&amp;quot;getpass: cannot open /dev/tty&amp;quot;));&lt;/font&gt;&lt;br&gt;269&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;&lt;br&gt;270&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;271&amp;nbsp;&amp;nbsp; &lt;font style="background-color:#b6d7a8"&gt;encrypted = crypt (unencrypted, correct);&lt;/font&gt;&lt;br&gt;272&amp;nbsp;&amp;nbsp; memset (unencrypted, 0, strlen (unencrypted));&lt;br&gt;273&amp;nbsp;&amp;nbsp; return STREQ (encrypted, correct);&lt;br&gt;274 }&lt;br&gt;&lt;br&gt;&amp;#37117;&amp;#26159;:&lt;br&gt;1. &amp;#20351;&amp;#29992;&amp;#20102;crypt&amp;#20989;&amp;#25968;&lt;br&gt;2. &amp;#26368;&amp;#21518;&amp;#37117;&amp;#26159;&amp;#23383;&amp;#31526;&amp;#20018;&amp;#27604;&amp;#36739;&lt;br&gt;3. &amp;#38656;&amp;#35201;/etc/shadow&amp;#37324;&amp;#30340;&amp;#21152;&amp;#23494;&amp;#21518;&amp;#23383;&amp;#31526;&amp;#20018;&lt;br&gt;&lt;font style="background-color:#ea9999"&gt;* &amp;#27604;&amp;#32418;&amp;#33394;&amp;#37096;&amp;#20998;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;getpass&amp;#26159;&amp;#22312;stdin&amp;#34987;&amp;#23450;&amp;#37325;&amp;#21521;&amp;#21518;&amp;#20250;&amp;#25253;&amp;#38169;(hard wire&amp;#22411;&amp;#30340;&amp;#31243;&amp;#24207;), &amp;#22240;&amp;#20026;&amp;#23427;&amp;#20351;&amp;#29992;&amp;#20102;&amp;#19981;&amp;#22238;&amp;#26174;&amp;#21151;&amp;#33021;(&amp;#21482;&amp;#26377;tty&amp;#25165;&amp;#26377;, pipe&amp;#27809;&amp;#26377;)&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#22312;python&amp;#23448;&amp;#32593;&amp;#37324;&amp;#30475;&amp;#21040;&amp;#21487;&amp;#29233;&amp;#30340;python&amp;#20195;&amp;#30721;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#30340;:&lt;br&gt;&lt;div style="margin-left:40px"&gt;crypt.crypt(cleartext, cryptedpasswd) == cryptedpasswd&lt;br&gt;&lt;br&gt;&lt;/div&gt;* &amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;crypt&amp;#20989;&amp;#25968;&amp;#30340;&amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#21487;&amp;#20197;&amp;#26159;salt, &amp;#20063;&amp;#21487;&amp;#20197;&amp;#19981;&amp;#26159;salt, &amp;#32780;&amp;#26159;&amp;#21152;&amp;#23494;&amp;#21518;&amp;#30340;&amp;#23383;&amp;#31526;&amp;#20018;&lt;br&gt;* &amp;#33258;&amp;#26469;http://docs.python.org/library/crypt.html?highlight=crypt#crypt.crypt&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;font style="background-color:#e69138"&gt;2. Lock &amp;#19982; Unlock &amp;#26159;&amp;#24590;&amp;#20040;&amp;#19968;&amp;#20010;&amp;#27010;&amp;#24565;?&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#22312;man 5 shadow&amp;#24471;&amp;#21040;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#65306;&lt;br&gt;&lt;br&gt;&lt;div style="margin-left:40px"&gt;If the password field contains some string that is not valid result of crypt(3), for instance ! or *, the user will not be able to use a unix password to log in, subject to pam(7).&lt;br&gt;&lt;/div&gt;&lt;br&gt;&amp;#20174;&amp;#19978;&amp;#38754;&amp;#30340;C&amp;#20195;&amp;#30721;&amp;#21644;crypt&amp;#20989;&amp;#25968;&amp;#30340;&amp;#29305;&amp;#24615;&amp;#21487;&amp;#20197;&amp;#29468;&amp;#27979;: &lt;b&gt;Lock&amp;#26080;&amp;#30097;&amp;#23601;&amp;#26159;&amp;#35753;&amp;#26041;&amp;#31243;&amp;#20004;&amp;#36793;&amp;#27704;&amp;#36828;&amp;#19981;&amp;#30456;&amp;#31561;, &amp;#20195;&amp;#30721;&amp;#27809;&amp;#26377;&amp;#20854;&amp;#23427;&amp;#27979;&amp;#35797;&amp;#30340;&amp;#24517;&amp;#35201;&lt;/b&gt;!&lt;br&gt;&lt;br&gt;&amp;#20855;&amp;#20307;&amp;#21040;ssh&amp;#30340;&amp;#23454;&amp;#20363;, &amp;#24403;&amp;#20351;&amp;#29992;&amp;#19968;&amp;#25351;&amp;#23450;&amp;#29992;&amp;#25143;&amp;#30331;&amp;#38470;ssh server&amp;#26102;, server&amp;#24182;&amp;#19981;&amp;#21435;&amp;#20998;&amp;#21035;Lock&amp;#19982;&amp;#19981;Lock&amp;#30340;&amp;#24080;&amp;#21495;,&lt;br&gt;&amp;#34429;&amp;#28982;&amp;#27809;&amp;#26377;&amp;#30475;&amp;#36807;sshd&amp;#30340;&amp;#20195;&amp;#30721;, &amp;#20294;&amp;#26159;&amp;#20174;&amp;#34920;&amp;#29616;&amp;#19978;: &amp;#19981;&amp;#20250;&amp;#39532;&amp;#19978;&amp;#25171;&amp;#21360;: Lock user&amp;#25110;&amp;#32773;&amp;#39532;&amp;#19978;disconnect, &amp;#22914;&amp;#20351;&amp;#29992;&amp;#20840;&amp;#19990;&amp;#30028;&amp;#37117;&amp;#20844;&amp;#35748;&amp;#30340;halt&amp;#40664;&amp;#35748;&amp;#24080;&amp;#21495;&amp;#20063;&amp;#26159;&amp;#25552;&amp;#31034;&amp;#36755;&amp;#20837;&amp;#23494;&amp;#30721;:&lt;br&gt;$ ssh halt@localhost&lt;br&gt;halt@localhost&amp;#39;s password: &lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;font style="background-color:#e69138"&gt;3. &amp;#20854;&amp;#23427;&lt;/font&gt;&lt;/font&gt;&lt;br&gt;su&amp;#20999;&amp;#25442;&amp;#29992;&amp;#25143;&lt;br&gt;FAIL : &amp;#20197;&amp;#20026;&amp;#20999;&amp;#25442;&amp;#20160;&amp;#20040;&amp;#29992;&amp;#25143;&amp;#37117;&amp;#26159;&amp;#36755;&amp;#20837;root&amp;#23494;&amp;#30721;&lt;br&gt;&amp;#22823;&amp;#27010;&amp;#30475;&amp;#20102;&amp;#19968;&amp;#25226;su&amp;#30340;&amp;#20195;&amp;#30721;, &amp;#25165;&amp;#30693;&amp;#36947;&amp;#19981;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#30340;~~~~&lt;br&gt;&amp;#30693;&amp;#36947;&amp;#20102;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#30495;&amp;#30456;:&lt;br&gt;1. &amp;#38656;&amp;#35201;&amp;#36755;&amp;#20837;&amp;#20999;&amp;#25442;&amp;#21040;&amp;#29992;&amp;#25143;&amp;#30340;&amp;#23494;&amp;#30721;&lt;br&gt;2. restricted shell : &amp;#20961;&amp;#19981;&amp;#22312;/etc/shells&amp;#37324;&amp;#30331;&amp;#38470;&amp;#30340;shell&amp;#37117;&amp;#26159;&amp;#21463;&amp;#38480;shell. &amp;#20026;&amp;#20102;&amp;#23433;&amp;#20840;&amp;#30340;&lt;br&gt;&lt;br&gt;nologin&lt;br&gt;&amp;#24179;&amp;#26102;nologin&amp;#40664;&amp;#35748;&amp;#25171;&amp;#21360;&amp;#20449;&amp;#24687;&amp;#26159;: This account is currently not available.&lt;br&gt;&amp;#20320;&amp;#20063;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#20462;&amp;#25913;&amp;#30340;: /etc/nologin.txt, &amp;#20363;&amp;#22914;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#20363;&amp;#23376;:&lt;br&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;$ sudo su rpc&lt;/font&gt;&lt;br style="background-color:#b6d7a8"&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#25105;&amp;#39030;&amp;#65374; &amp;#20081;&amp;#26469;~ &amp;#21435;&amp;#38382;&amp;#20320;&amp;#22920;&amp;#35201;&amp;#23494;&amp;#30721;, &amp;#19981;&amp;#28982;&amp;#35265;&amp;#19968;&amp;#27425;&amp;#39554;&amp;#19968;&amp;#27425;&lt;/font&gt;&lt;br&gt;&amp;nbsp;* &amp;#36825;&amp;#20010;&amp;#20363;&amp;#23376;&amp;#26377;&amp;#28857;geek~&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-8334334560487175434?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/8334334560487175434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/blog-post_8554.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8334334560487175434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8334334560487175434'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/blog-post_8554.html' title='帐号'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3485160355999988554</id><published>2010-05-28T10:01:00.001-07:00</published><updated>2010-05-28T10:01:14.712-07:00</updated><title type='text'>虚假终端: pseudo-terminal</title><content type='html'>&amp;#20043;&amp;#21069;&amp;#21482;&amp;#21548;&amp;#21069;pseudo terminal, &amp;#20294;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#29702;&amp;#20250;. &amp;#21069;&amp;#27573;&amp;#26102;&amp;#38388;&amp;#22312;&amp;#20889;&amp;#33050;&amp;#26412;&amp;#26102;&amp;#21463;&amp;#28857;&amp;#19968;&amp;#28857;&amp;#38480;&amp;#21046;&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;div&gt;1. &amp;#20026;&amp;#20160;&amp;#20040;&amp;#20351;&amp;#29992;subprocess&amp;#26080;&amp;#27861;&amp;#19982;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#22810;&amp;#27425;&amp;#36890;&amp;#20449;?&lt;/div&gt;&lt;div&gt;2. &amp;#20687;su&amp;#36825;&amp;#31181;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#20351;&amp;#29992;subprocess&amp;#26080;&amp;#27861;&amp;#35843;&amp;#29992;? ( &amp;#36825;&amp;#31181;&amp;#36719;&amp;#20214;&amp;#26377;&amp;#19968;&amp;#20010;&amp;#35789;&amp;#26469;&amp;#25551;&amp;#36848;: hard wire , &amp;#34920;&amp;#31034;&amp;#38656;&amp;#35201;terminal, &amp;#20195;&amp;#30721;&amp;#20013;&amp;#20351;&amp;#29992;&amp;#20102;istty&amp;#20989;&amp;#25968;&amp;#26816;&amp;#27979;&amp;#21040; )&lt;/div&gt;&lt;div&gt;3. vim&amp;#36825;&amp;#31181;&amp;#36719;&amp;#20214;&amp;#30340;&amp;#20132;&amp;#20114;&amp;#26159;&amp;#24590;&amp;#20040;&amp;#23454;&amp;#29616;&amp;#30340;?&lt;/div&gt;&lt;br&gt;&lt;div&gt;subprocess&amp;#30340;communicate&amp;#20989;&amp;#25968;&amp;#26159;&amp;#20195;&amp;#30721;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#30340;:&lt;/div&gt;&lt;br&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if self.stdin:&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if input:&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.stdin.write(input)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;self.stdin.close()&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&amp;#36825;&amp;#37324;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#38656;&amp;#35201;self.stdin.close()&amp;#21602;? &amp;#36825;&amp;#23601;&amp;#26159;subprocess&amp;#26080;&amp;#27861;&amp;#19982;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#22810;&amp;#27425;&amp;#36890;&amp;#20449;&amp;#30340;&amp;#22320;&amp;#26041;.&lt;br&gt;&lt;div&gt;&amp;#22312;&amp;#19981;&amp;#26126;&amp;#30333;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#38656;&amp;#35201;close&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;, &amp;#33258;&amp;#24049;&amp;#20889;&amp;#30340;&amp;#19968;&amp;#27573;fork&amp;#21151;&amp;#33021;&amp;#30340;&amp;#20195;&amp;#30721;, &amp;#32080;&amp;#26524;: &amp;#24403;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#35835;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#30340;stdout&amp;#26102;&amp;#34987;block&amp;#20102;. &amp;#20854;&amp;#23454;, &amp;#36825;&amp;#26102;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#21644;&amp;#23376;&amp;#36827;&amp;#31243;&amp;#37117;&amp;#26159;block&amp;#30340;, &amp;#36825;&amp;#34987;&amp;#31216;&amp;#20026;&amp;quot;&amp;#27515;&amp;#38145;&amp;quot;. &amp;#36825;&amp;#23601;&amp;#26159;&amp;#20026;&amp;#20160;&amp;#20040;subprocess&amp;#37324;&amp;#38656;&amp;#35201;close&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#37027;&amp;#20040;, &amp;#25105;&amp;#30340;&amp;#38656;&amp;#27714;:&lt;/div&gt;&lt;div&gt;1. &amp;#22312;&amp;#35843;&amp;#29992;&amp;#22806;&amp;#37096;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;, &amp;#22914;&amp;#20309;&amp;#22810;&amp;#27425;&amp;#29238;-&amp;#23376;&amp;#36827;&amp;#31243;&amp;#36890;&amp;#20449;?&lt;/div&gt;&lt;div&gt;2. &amp;#22914;&amp;#20309;&amp;#35843;&amp;#29992;hard wire&amp;#30340;&amp;#31243;&amp;#24207;?&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#31181;&amp;#31181;&amp;#38382;&amp;#39064;&amp;#30340;&amp;#28014;&amp;#29616;&amp;#35753;sysadmin&amp;#23703;&amp;#20301;&amp;#30340;&amp;#26412;&amp;#20154;&amp;#19981;&amp;#29245;. &amp;#33267;&amp;#23569;&amp;#19981;&amp;#26041;&amp;#20415;&amp;#24037;&amp;#20316;....&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#20363;&amp;#23376;:&lt;/div&gt;&lt;div&gt;1. passwd&amp;#30340;&amp;#35843;&amp;#29992;&lt;/div&gt;&lt;div&gt;passwd&amp;#26159;&amp;#19968;&amp;#20856;&amp;#22411;&amp;#30340;hard wire&amp;#31243;&amp;#24207;, &amp;#19979;&amp;#38754;&amp;#30340;&amp;#26041;&amp;#24335;&amp;#35843;&amp;#29992;&amp;#26159;&amp;#19981;&amp;#34892;&amp;#30340;:&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;$ echo &amp;quot;new password&amp;quot; | passwd&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;&amp;#27604;&amp;#36739;&amp;#26377;&amp;#24847;&amp;#24605;&amp;#30340;&amp;#26159;passwd&amp;#22312;&amp;#19981;&amp;#21516;&amp;#30340;&amp;#31995;&amp;#32479;&amp;#25110;&amp;#32773;&amp;#26159;distro&amp;#19979;&amp;#37117;&amp;#26159;&amp;#19981;&amp;#21516;&amp;#30340;.&lt;/div&gt;&lt;div&gt;&amp;nbsp;* freeBSD&amp;#19979;&amp;#26377;&amp;#21442;&amp;#25968;&amp;#25511;&amp;#21046;(&amp;#20855;&amp;#20307;&amp;#30340;&amp;#24536;&amp;#20102;, &amp;#20063;&amp;#27809;&amp;#26377;&amp;#29615;&amp;#22659;&amp;#22238;&amp;#39038;), &amp;#25104;&amp;#20026;batch mode&lt;/div&gt;&lt;div&gt;&amp;nbsp;* redhat&amp;#31995;&amp;#20351;&amp;#29992;&amp;quot;--stdin&amp;quot;&amp;#25511;&amp;#21046;&lt;/div&gt;&lt;div&gt;&amp;nbsp;* ubuntu&amp;#19979;&amp;#27809;&amp;#26377;batch mode&amp;#21442;&amp;#25968;&lt;/div&gt;&lt;br&gt;&lt;div&gt;2. su -c &amp;quot;my command&amp;quot;&amp;#30340;&amp;#35843;&amp;#29992;&lt;/div&gt;&amp;#20351;&amp;#29992;&amp;#22312;&amp;#31995;&amp;#32479;&amp;#19978;&amp;#20351;&amp;#29992;su ( &amp;#25105;&amp;#19981;&amp;#24471;&amp;#19981;&amp;#35828;, &amp;#27809;&amp;#26377;sudo&amp;#20351;&amp;#29992;~~~), &amp;#36825;&amp;#23558;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#22823;&amp;#30340;&amp;#40635;&amp;#28902;~~&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#21518;&amp;#30693;&amp;#21518;&amp;#35273;, &amp;#21457;&amp;#29616;&amp;#20102;pseudo terminal&amp;#36825;&amp;#19968;&amp;#27010;&amp;#24565;. &amp;#23427;&amp;#30340;&amp;#24212;&amp;#29992;&amp;#24456;&amp;#24191;&amp;#27867;, &amp;#27604;&amp;#22914;&amp;#25552;&amp;#20379;network login&amp;#30340;sshd&amp;#23601;&amp;#20351;&amp;#29992;&amp;#21040;&amp;#27492;&amp;#27010;&amp;#24565;&lt;/div&gt;&lt;div&gt;&amp;nbsp;*&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Pseudo_terminal"&gt;http://en.wikipedia.org/wiki/Pseudo_terminal&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#26379;&amp;#21451;(&lt;font face="arial, sans-serif"&gt;&lt;font color="#777777"&gt;&lt;font size="2"&gt;mrluanma (AT) gmail.com)&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&amp;#30340;&amp;#24110;&amp;#24537;&amp;#19979;, &amp;#25214;&amp;#21040;pexpect&amp;#31243;&amp;#24207;(http://www.noah.org/wiki/Pexpect). &amp;#25552;&amp;#20379;&amp;#20102;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#22909;&amp;#30340;&amp;#23398;&amp;#20064;&amp;#27169;&amp;#26495;.&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#21018;&amp;#25509;&amp;#35302;pseudo terminal&amp;#24456;&amp;#22836;&amp;#22823;&amp;#30340;, &amp;#36824;&amp;#22909;APUE&amp;#19968;&amp;#20070;&amp;#20013;&amp;#26377;&amp;#36825;&amp;#37096;&amp;#20998;&amp;#21644;&amp;#20851;&amp;#20110;terminal I/O&amp;#30340;&amp;#36164;&amp;#26009;, &amp;#19979;&amp;#38754;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#28165;&amp;#26224;&amp;#30340;&amp;#22270;:&lt;/div&gt;&lt;br&gt;&lt;div id="e5-q" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_461fg6mhm8z_b" style="height:295px;width:307px"&gt;&lt;/div&gt;&lt;br&gt;&amp;#26412;&amp;#20154;&amp;#20889;&amp;#20102;&amp;#20004;&amp;#20010;&amp;#31616;&amp;#21333;&amp;#30340;&amp;#20363;&amp;#23376;:&lt;div&gt;1. &amp;#20351;&amp;#29992;pty.fork()&amp;#20989;&amp;#25968;&amp;#20135;&amp;#29983;&amp;#23376;&amp;#36827;&amp;#31243;, &amp;#23376;&amp;#36827;&amp;#31243;&amp;#19982;&amp;#29238;&amp;#36827;&amp;#31243;&amp;#30340;controlling terminal&amp;#26159;&amp;#19981;&amp;#21516;&amp;#30340;.&lt;/div&gt;&lt;div&gt;&amp;#20195;&amp;#30721;&amp;#22320;&amp;#22336;:&amp;nbsp;&lt;a href="http://svn.lvscar.info/jessinio_repos/learn_pty.py"&gt;http://svn.lvscar.info/jessinio_repos/learn_pty.py&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;#24080;&amp;#21495;&amp;#19982;&amp;#23494;&amp;#30721;&amp;#37117;&amp;#26159;svn&lt;/div&gt;&lt;br&gt;&lt;div&gt;2. &amp;#20351;&amp;#29992;pty&amp;#23454;&amp;#29616;&amp;#35843;&amp;#29992;passwd&amp;#36825;&amp;#31181;hard wire&amp;#22806;&amp;#37096;&amp;#31243;&amp;#24207;&lt;/div&gt;&lt;div&gt;&amp;#20195;&amp;#30721;&amp;#22320;&amp;#22336;:&amp;nbsp;&lt;a href="http://svn.lvscar.info/jessinio_repos/use_pty_call_passwd.py"&gt;http://svn.lvscar.info/jessinio_repos/use_pty_call_passwd.py&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&amp;#24080;&amp;#21495;&amp;#19982;&amp;#23494;&amp;#30721;&amp;#37117;&amp;#26159;svn&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3485160355999988554?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3485160355999988554/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/pseudo-terminal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3485160355999988554'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3485160355999988554'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/pseudo-terminal.html' title='虚假终端: pseudo-terminal'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-1983561957348227014</id><published>2010-05-24T01:40:00.001-07:00</published><updated>2010-05-24T01:40:49.697-07:00</updated><title type='text'>记一次开源软件原理追查</title><content type='html'>&amp;#26377;&amp;#36825;&amp;#31181;dig&amp;#34892;&amp;#20026;&amp;#65292; &amp;#20027;&amp;#35201;&amp;#26159;&amp;#26412;&amp;#20154;&amp;#24819;&amp;#20889;&amp;#23436;&amp;#19968;&amp;#31687;&amp;#31508;&amp;#35760;&amp;#65292; &amp;#26159;&amp;#20851;&amp;#20110;xxx.pid&amp;#25991;&amp;#20214;&amp;#19982;&amp;#38145;&amp;#30340;&amp;#25991;&amp;#31456;&amp;#12290;&lt;br&gt;&amp;#22312;&amp;#23454;&amp;#38469;&amp;#21644;&amp;#33258;&amp;#24049;&amp;#20102;&amp;#35299;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#20013;&amp;#65292; &amp;#25484;&amp;#25569;&amp;#30340;&amp;#19996;&amp;#35199;&amp;#19981;&amp;#22815;&amp;#22810;&amp;#65292; &amp;#25152;&amp;#20197;&amp;#23601;dig&amp;#19979;&amp;#21435;&amp;#20102;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#22312;shell&amp;#20013;&amp;#65292; &amp;#22914;&amp;#26524;&amp;#35201;&amp;#24471;&amp;#21040;&amp;#25991;&amp;#20214;&amp;#38145;&amp;#65292;&amp;#22312;debian&amp;#31995;&amp;#30340;distro&amp;#19979;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#36825;&amp;#20010;&amp;#21253;:&amp;nbsp; lockfile-progs&lt;br&gt;&lt;br&gt;ubuntu&amp;#19979;&amp;#24050;&amp;#32463;&amp;#39044;&amp;#35013;&lt;br&gt;http://packages.qa.debian.org/l/lockfile-progs.html&lt;br&gt;&lt;br&gt;&amp;#22240;&amp;#20026;&amp;#19968;&amp;#30452;&amp;#23545;lock file &amp;#21644; file lock&amp;#36825;&amp;#20004;&amp;#20010;&amp;#21517;&amp;#35789;&amp;#32416;&amp;#32467;&amp;#19981;&amp;#28165;, &amp;#25152;&amp;#20197;&amp;#23601;&amp;#19979;&amp;#36733;&amp;#28304;&amp;#20195;&amp;#30721;&amp;#65288;&amp;#36824;&amp;#22909;&amp;#65292; &amp;#24456;&amp;#31616;&amp;#30701;&amp;#65289;&amp;#26469;&amp;#30475;&lt;br&gt;&lt;br&gt;&amp;#21457;&amp;#29616;&amp;#20351;&amp;#29992;&amp;#20102;liblockfile&amp;#24211;, &amp;#35270;&amp;#32447;&amp;#34987;&amp;#36716;&amp;#21040;&amp;#36825;&amp;#19968;&amp;#20010;library&amp;#19978;, &amp;#39318;&amp;#20808;&amp;#24819;&amp;#21040;&amp;#30340;&amp;#26159;&amp;#25214;&amp;#36825;&amp;#20010;&amp;#24211;&amp;#30340;&amp;#25991;&amp;#26723;&lt;br&gt;&lt;br&gt;dpkg -l|grep lockfile&lt;br&gt;&amp;#24471;&amp;#21040;&amp;#65306;&lt;br&gt;liblockfile1&lt;br&gt;&lt;br&gt;dpkg -L liblockfile1&lt;br&gt;&amp;#21482;&amp;#26377;&amp;#19968;&amp;#20221;man&amp;#25163;&amp;#20876;&amp;#65292;&amp;#26159;&amp;#20851;&amp;#20110;&amp;#38543;liblockfile1&amp;#21253;&amp;#21457;&amp;#24067;&amp;#30340;dotlockfile&amp;#31243;&amp;#24207;&amp;#30340;&amp;#35828;&amp;#26126;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#21999;, &amp;#33267;&amp;#23569;&amp;#27604;&amp;#27809;&amp;#26377;&amp;#22909;&amp;#21543;.....man&amp;#20043;&lt;br&gt;&lt;br&gt;&amp;#19981;&amp;#36807;&amp;#24456;&amp;#26377;&amp;#24847;&amp;#24605;&amp;#30340;&amp;#26159;&amp;#20174;&amp;#36825;&amp;#20221;&amp;#25163;&amp;#20876;&amp;#37324;&amp;#30475;&amp;#21040;&amp;#19968;&amp;#28857;&amp;#32447;&amp;#32034;&amp;#65306;&lt;br&gt;The above mentioned lockfile_create(3) manpage is present in the liblockfile-dev package.&lt;br&gt;&lt;br&gt;&amp;#21621;&amp;#21621;&amp;#65292; lockfile_create &amp;#36825;&amp;#20010;API&amp;#30340;&amp;#25163;&amp;#20876;&amp;#22312;dev&amp;#21253;&amp;#37324;&amp;#65292; &amp;#39532;&amp;#19978;apt-get&amp;#23433;&amp;#35013;&lt;br&gt;&lt;br&gt;lockfile_create API&amp;#25163;&amp;#20876;&amp;#37324;&amp;#26377;&amp;#19968;&amp;#33410;&amp;#21483;ALGORITHM&amp;#30340;&amp;#12290; &amp;#20854;&amp;#23454;&amp;#36825;&amp;#19968;&amp;#33410;&amp;#24050;&amp;#32463;&amp;#35828;&amp;#26126;&amp;#20102;&amp;#21407;&amp;#29702;&amp;#21644;&amp;#27969;&amp;#31243;&amp;#20102;&amp;#65288;&amp;#20174;man&amp;#25163;&amp;#20876;&amp;#37324;&amp;#30340;&amp;#25991;&amp;#23383;&amp;#36716;&amp;#25104;&amp;#27969;&amp;#31243;&amp;#36824;&amp;#26159;&amp;#38656;&amp;#35201;&amp;#24456;&amp;#32454;&amp;#24515;&amp;#22320;&amp;#38405;&amp;#35835;&amp;#65289;&lt;br&gt;&amp;#25105;&amp;#23545;&amp;#20854;&amp;#23427;&amp;#30340; &amp;quot;A check is made to see if the existing lockfile is a valid one&amp;quot; &amp;#19981;&amp;#26159;&amp;#24456;&amp;#26126;&amp;#30333;&amp;#65292; &amp;#25152;&amp;#20197;&amp;#25214;&amp;#20102;lockfile_check&amp;#20989;&amp;#25968;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#30475;&amp;#65292; &amp;#36825;&amp;#37324;&amp;#23601;&amp;#19981;&amp;#36148;&amp;#20195;&amp;#30721;&amp;#20102;&amp;#65288;&amp;#36824;&amp;#26159;wordpress&amp;#20889;blog&amp;#22909;&amp;#21568;&amp;#65374;&amp;#65374;&amp;#65289;&lt;br&gt;&amp;#20195;&amp;#30721;&amp;#21487;&amp;#20197;&amp;#20986;&amp;#19979;&amp;#38754;&amp;#30340;&amp;#22320;&amp;#22336;&amp;#24471;&amp;#21040;&amp;#65306;&lt;br&gt;&amp;nbsp;* http://liblockfile.sourcearchive.com/documentation/1.06.1/lockfile_8c-source.html&lt;br&gt;&lt;br&gt;lockfile_check&amp;#20989;&amp;#25968;&amp;#30340;&amp;#21028;&amp;#26029;&amp;#26377;&amp;#20004;&amp;#20010;&amp;#65306;&lt;br&gt;1. lock file&amp;#20013;&amp;#20445;&amp;#23384;PID&amp;#21495;&amp;#20195;&amp;#34920;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#26159;&amp;#21542;&amp;#36824;&amp;#23384;&amp;#22312;&amp;#65292; &amp;#36890;&amp;#36807;kill&amp;#20989;&amp;#25968;&amp;#24471;&amp;#21040;&amp;#12290; &amp;#65288;&amp;#29992;&amp;#27861;&amp;#19982;xxx.pid&amp;#25991;&amp;#20214;&amp;#31867;&amp;#20284;&amp;#65292; &amp;#20851;&amp;#20110;xxx.pid&amp;#29992;&amp;#27861;&amp;#65292; &amp;#26412;&amp;#20154;&amp;#21035;&amp;#36215;&amp;#31508;&amp;#35760;&amp;#65289;&lt;br&gt;2. &amp;#22914;&amp;#26524;lock file &amp;#20013;&amp;#20445;&amp;#23384;&amp;#30340;pid&amp;#21495;&amp;#20026;0&amp;#65292; &amp;#21017;&amp;#19982;5&amp;#20998;&amp;#38047;&amp;#20026;lock file&amp;#29983;&amp;#21629;&amp;#26399;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-1983561957348227014?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/1983561957348227014/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1983561957348227014'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1983561957348227014'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/blog-post.html' title='记一次开源软件原理追查'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4421179970317527633</id><published>2010-05-24T01:32:00.001-07:00</published><updated>2010-05-24T02:06:54.503-07:00</updated><title type='text'>xxx.pid文件与lock file</title><content type='html'>&lt;div&gt;linux&amp;#19979;&amp;#65292; xxx.pid&amp;#36825;&amp;#31867;&amp;#25991;&amp;#20214;&amp;#36824;&amp;#26159;&amp;#24456;&amp;#24120;&amp;#35265;&amp;#30340;&amp;#65292; &amp;#29305;&amp;#21035;&amp;#26159;&amp;#22312;/var/run&amp;#30446;&amp;#24405;&amp;#19979;&amp;#65292; APUE&amp;#19968;&amp;#20070;&amp;#37117;&amp;#26159;&amp;#25512;&amp;#20171;&amp;#22312;&amp;#36825;&amp;#37324;&amp;#21019;&amp;#24314;pid&amp;#25991;&amp;#20214;&amp;#12290;&lt;br&gt;pid&amp;#25991;&amp;#20214;&amp;#21040;&amp;#24213;&amp;#26377;&amp;#20160;&amp;#20040;&amp;#20316;&amp;#29992;&amp;#21602;&amp;#65311; &amp;#29992;&amp;#27861;&amp;#26159;&amp;#22914;&amp;#20309;&amp;#30340;&amp;#21602;&amp;#65311;&amp;#31181;&amp;#31181;&amp;#30097;&amp;#38382;&amp;#35753;&amp;#25105;&amp;#20135;&amp;#29983;&amp;#20102;dig&amp;#30340;&amp;#20914;&amp;#21160;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#20808;&amp;#30475;&amp;#30475;&amp;#23454;&amp;#29616;&amp;#29983;&amp;#27963;&amp;#20013;&amp;#30896;&amp;#21040;&amp;#30340;&amp;#65306;&lt;br&gt;&lt;h4&gt;1. init.d&amp;#33050;&amp;#26412;&amp;#20351;&amp;#29992;&amp;#21040;pid&amp;#25991;&amp;#20214;&lt;/h4&gt;/etc/init.d&amp;#30446;&amp;#24405;&amp;#19979;&amp;#23384;&amp;#25918;&amp;#20102;&amp;#20247;&amp;#22810;daemon&amp;#31243;&amp;#24207;&amp;#30340;&amp;#25511;&amp;#21046;&amp;#33050;&amp;#26412;&amp;#65292;&amp;#36825;&amp;#31867;&amp;#33050;&amp;#26412;&amp;#19968;&amp;#33324;&amp;#26377;&amp;#20960;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#65306;&lt;br&gt;&lt;ol&gt;&lt;li&gt;start&lt;/li&gt;&lt;li&gt;retstart&lt;/li&gt;&lt;li&gt;stop&lt;/li&gt;&lt;li&gt;&amp;#24378;&amp;#22823;&amp;#30340;&amp;#19987;&amp;#19994;&amp;#26381;&amp;#21153;&amp;#31471;&amp;#36824;&amp;#26377;gracestop&amp;#20043;&amp;#31867;&amp;#30340;&amp;#21442;&amp;#25968;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&amp;#36825;&amp;#31867;&amp;#33050;&amp;#26412;&amp;#30340;&amp;#36825;&amp;#20123;&amp;#21442;&amp;#25968;&amp;#21151;&amp;#33021;&amp;#30340;&amp;#23454;&amp;#29616;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#21040;&amp;#20102;linux&amp;#30340;signal&amp;#26426;&amp;#21046;&amp;#65292; &amp;#26080;&amp;#30097;&amp;#38656;&amp;#35201;daemon&amp;#36827;&amp;#31243;&amp;#30340;pid&lt;br&gt;&lt;br&gt;&lt;h3&gt;2. lock&lt;/h3&gt;lock&amp;#20027;&amp;#35201;&amp;#26159;&amp;#21327;&amp;#35843;&amp;#65292; &amp;#25805;&amp;#20316;atomic&amp;#26102;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#19968;&amp;#31181;&amp;#26041;&amp;#24335;&amp;#12290;&lt;br&gt;&amp;#20030;&amp;#20010;&amp;#23454;&amp;#38469;&amp;#20013;&amp;#30340;&amp;#20363;&amp;#23376;&amp;#65306;&lt;br&gt;&amp;#31995;&amp;#32479;&amp;#38656;&amp;#35201;&amp;#19968;&amp;#20010;&amp;#23450;&amp;#26102;&amp;#20219;&amp;#21153;&amp;#65292; &amp;#35201;&amp;#27714;&amp;#27599;&amp;#20998;&amp;#38047;&amp;#23545;&amp;#31995;&amp;#32479;N&amp;#22810;&amp;#29366;&amp;#24577;&amp;#25910;&amp;#38598;&amp;#65288;&amp;#22914;&amp;#30828;&amp;#30424;&amp;#65292;CPU&amp;#65292; &amp;#32593;&amp;#32476;&amp;#31561;&amp;#31561;&amp;#65289;&amp;#65292; &amp;#25910;&amp;#38598;&amp;#36807;&amp;#31243;&amp;#20013;&amp;#19981;&amp;#26029;&amp;#26377;&amp;#26085;&amp;#24535;&amp;#20135;&amp;#29983;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#36825;&amp;#20010;&amp;#20363;&amp;#23376;&amp;#20250;&amp;#26377;&amp;#20004;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#65306;&lt;br&gt;&lt;ol&gt;&lt;li&gt;&amp;#36816;&amp;#34892;&amp;#38388;&amp;#38548;&amp;#20026;&amp;#27599;&amp;#20998;&amp;#38047;&amp;#65292; &amp;#21487;&amp;#33021;&amp;#20250;&amp;#23450;&amp;#26102;&amp;#20219;&amp;#21153;&amp;#26576;&amp;#27425;&amp;#36816;&amp;#34892;&amp;#26102;&amp;#38271;&amp;#38271;&amp;#20110;1&amp;#20998;&amp;#38047;&amp;#12290;&lt;/li&gt;&lt;li&gt;&amp;#22914;&amp;#26524;&amp;#20986;&amp;#29616;1&amp;#30340;&amp;#24773;&amp;#20917;&amp;#20250;&amp;#23545;&amp;#26085;&amp;#24535;&amp;#20135;&amp;#29983;&amp;#24433;&amp;#21709;&lt;/li&gt;&lt;/ol&gt;lock&amp;#20027;&amp;#35201;&amp;#26159;&amp;#29992;&amp;#20110;&amp;#35777;&amp;#23454;&amp;#26377;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#22788;&amp;#29702;&amp;#12290;&lt;br&gt;&lt;br&gt;linux&amp;#31995;&amp;#32479;&amp;#26412;&amp;#36523;&amp;#26377;&amp;#38145;&amp;#30340;&amp;#26426;&amp;#21046;&amp;#65292; &amp;#22914;flock&amp;#21644;fcntl&amp;#20989;&amp;#25968;&amp;#12290; &amp;#36825;&amp;#31181;&amp;#38145;&amp;#31216;&amp;#20026;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#65292; &amp;#25991;&amp;#20214;&amp;#38145;&lt;br&gt;linux&amp;#19979;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#38145;&amp;#21487;&amp;#20197;&amp;#23545;&amp;#19968;&amp;#20010;&amp;#25991;&amp;#20214;&amp;#30340;&amp;#19968;&amp;#20010;&amp;#21306;&amp;#22495;&amp;#36827;&amp;#34892;&amp;#38145;&amp;#23450;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29616;&amp;#22312;&amp;#65292; &amp;#26412;&amp;#31508;&amp;#35760;&amp;#19981;&amp;#24819;&amp;#25199;&amp;#19978;&amp;#36825;&amp;#31181;&amp;#24378;&amp;#22823;&amp;#21151;&amp;#33021;&amp;#65292; &amp;#21482;&amp;#26159;&amp;#35848;&amp;#35770;&amp;#19978;&amp;#38754;&amp;#20030;&amp;#30340;&amp;#20363;&amp;#23376;&amp;#65306; &amp;#24590;&amp;#20040;&amp;#35753;&amp;#36827;&amp;#31243;&amp;#24471;&amp;#21040;&amp;#19968;&amp;#20010;&amp;#32080;&amp;#26524;&amp;#65306;&amp;#33021;&amp;#21542;&amp;#22788;&amp;#29702;&lt;br&gt;&lt;br&gt;&amp;#23436;&amp;#25104;&amp;#36825;&amp;#38656;&amp;#27714;&amp;#65292; &amp;#21482;&amp;#38656;&amp;#35201;&amp;#19968;&amp;#20010;&amp;#26631;&amp;#24535;&amp;#65292; &amp;#36825;&amp;#20010;&amp;#26631;&amp;#24535;&amp;#38656;&amp;#35201;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#24471;&amp;#21040;&amp;#26102;&amp;#26159;atomic&amp;#24615;&amp;#30340;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#21487;&amp;#20197;&amp;#36890;&amp;#36807;&amp;#20004;&amp;#31181;&amp;#26041;&amp;#27861;&amp;#24471;&amp;#36825;&amp;#31181;&amp;#26631;&amp;#24535;&amp;#65306;&lt;br&gt;&lt;ol&gt;&lt;li&gt;&amp;#25351;&amp;#23450;&amp;#25991;&amp;#20214;&amp;#24050;&amp;#32463;&amp;#23384;&amp;#22312;&amp;#65292; &amp;#34920;&amp;#31034;&amp;#26377;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#22788;&amp;#29702;. &amp;#36825;&amp;#31181;&amp;#26041;&amp;#24335;&amp;#31216;&amp;#20026;&lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&amp;#20351;&amp;#29992;&amp;#31995;&amp;#32479;&amp;#26412;&amp;#36523;&amp;#30340;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#26426;&amp;#21046;&amp;#65292; &amp;#22914;&amp;#26524;open&amp;#30340;file descriptor&amp;#26377;&amp;#38145;&amp;#65292; &amp;#34920;&amp;#31034;&amp;#26377;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#22788;&amp;#29702;&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;&lt;br&gt;&amp;#20351;&amp;#29992;linux&amp;#30340;flock&amp;#20989;&amp;#25968;&amp;#24471;&amp;#21040;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#65292; &amp;#36825;&amp;#37324;&amp;#26377;&amp;#19968;&amp;#20010;python&amp;#30340;&amp;#20363;&amp;#23376;&amp;#65306;&lt;br&gt;http://svn.lvscar.info/jessinio_repos/flock_example.py&lt;br&gt;&amp;nbsp; * &amp;#24080;&amp;#21495;&amp;#19982;&amp;#23494;&amp;#30721;&amp;#37117;&amp;#26159;svn&lt;br&gt;&lt;br&gt;&lt;h3&gt;&lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt; &amp;#21644;&amp;nbsp;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt; &amp;#30340;&amp;#21306;&amp;#21035;&lt;/h3&gt;&lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt;&amp;#26159;&amp;#21033;&amp;#29992;&amp;#31995;&amp;#32479;&amp;#26412;&amp;#36523;&amp;#30340;open, link, stat&amp;#36825;&amp;#26679;&amp;#30340;&amp;#20989;&amp;#25968;, &amp;#23454;&amp;#29616;&amp;#25991;&amp;#20214;&amp;#21019;&amp;#24314;&amp;#30340;atomic&amp;#24615;. &amp;#25104;&amp;#21151;&amp;#34987;&amp;#21019;&amp;#24314;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#20316;&amp;#20026;atomic&amp;#30340;&amp;#26631;&amp;#24535;&lt;br&gt;&lt;br&gt;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#26159;&amp;#21033;&amp;#29992;&amp;#31995;&amp;#32479;&amp;#26412;&amp;#36523;&amp;#30340;fcntl&amp;#25110;&amp;#32773;flock&amp;#20989;&amp;#25968;&amp;#23545;&amp;#26576;&amp;#19968;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#36827;&amp;#34892;&amp;#38145;&amp;#23450;, &amp;#23558;&amp;#33021;&amp;#21542;&amp;#25104;&amp;#21151;&amp;#38145;&amp;#23450;&amp;#25991;&amp;#20214;&amp;#20316;&amp;#20026;atomic&amp;#30340;&amp;#26631;&amp;#24535;&lt;br&gt;&lt;br&gt;&amp;#26080;&amp;#35770;&amp;#26159;&lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt; &amp;#36824;&amp;#26159; &lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#37117;&amp;#26159;&amp;#38656;&amp;#35201;&amp;#25991;&amp;#20214;&amp;#36825;&amp;#19968;&amp;#35282;&amp;#33394;&amp;#30340;. &amp;#20294;&amp;#26159;&amp;#36825;&amp;#19968;&amp;#25991;&amp;#20214;&amp;#36215;&amp;#30340;&amp;#20316;&amp;#29992;&amp;#19981;&amp;#21516;.&lt;br&gt;&lt;h3&gt;&amp;#26412;&amp;#25991;&amp;#20027;&amp;#35201;&amp;#26159;&amp;#24819;&amp;#25199;&lt;font color="#ff0000"&gt;lock file&lt;/font&gt;&amp;#19982;xxx.pid&amp;#25991;&amp;#20214;&amp;#30340;&amp;#20851;&amp;#31995;. &amp;#19981;&amp;#24819;&amp;#25199;&lt;b style="color:#0000ff"&gt;file lock&lt;/b&gt;&amp;#21644;&lt;font color="#ff0000"&gt;lock file&lt;/font&gt;&lt;/h3&gt;&amp;#20165;&amp;#20165;&amp;#38656;&amp;#35201;&amp;#21487;&amp;#20197;&amp;#26631;&amp;#24535;&amp;#34892;&amp;#20026;&amp;#30340;atomic&amp;#24615;&amp;#30340;&amp;#35805;, &lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt;&amp;#26159;&amp;#26368;&amp;#22909;&amp;#30340;&amp;#26041;&amp;#27861;:&lt;br&gt;1. NFS&amp;#19978;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;(flock&amp;#20989;&amp;#25968;&amp;#22312;&amp;#26087;&amp;#29256;&amp;#26412;&amp;#30340;NFS&amp;#19978;&amp;#19981;&amp;#36215;&amp;#20316;&amp;#29992;)&lt;br&gt;2. shell&amp;#33050;&amp;#26412;&amp;#21487;&amp;#29992;. &amp;#22240;&amp;#20026;&amp;#26159;shell&amp;#33050;&amp;#26412;&amp;#26159;CLI, &amp;#26102;&amp;#21051;&amp;#37117;&amp;#26159;&amp;#26032;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#22312;&amp;#22788;&amp;#29702;, &amp;#19981;&amp;#26041;&amp;#20415;&amp;#20351;&amp;#29992;flock(&amp;#36825;&amp;#26679;&amp;#38656;&amp;#35201;&amp;#19968;&amp;#20010;daemon&amp;#22312;&amp;#20445;&amp;#25345;file lock&amp;#30340;&amp;#23384;&amp;#22312;&lt;br&gt;&amp;nbsp;* &amp;#20851;&amp;#20110; lock file&amp;#21487;&amp;#20197;&amp;#31227;&amp;#27493;: http://en.wikipedia.org/wiki/File_locking#Lock_files&lt;br&gt;&lt;br&gt;&lt;h3&gt;&amp;#20351;&amp;#29992;&lt;b style="color:#ff0000"&gt;lock file&lt;/b&gt;&amp;#38656;&amp;#35201;&amp;#35299;&amp;#20915;&amp;#30340;&amp;#38382;&amp;#39064;&lt;/h3&gt;&amp;#24403;&amp;#20351;&amp;#29992;lock file&amp;#20316;&amp;#20026;atomic&amp;#30340;&amp;#26631;&amp;#24535;&amp;#26102;, &amp;#26377;&amp;#19968;&amp;#31181;&amp;#24773;&amp;#20917;&amp;#26159;&amp;#38656;&amp;#35201;&amp;#35299;&amp;#20915;&amp;#30340;: &lt;b style="background-color:#ffe599;color:#000000"&gt;&amp;#25345;&amp;#38145;&amp;#32773;&amp;#26159;&amp;#21542;&amp;#36824;&amp;#23384;&amp;#22312;&lt;/b&gt;, &amp;#20363;&amp;#22914;:&lt;br&gt;&lt;br&gt;&lt;/div&gt;&amp;#24403;&amp;#19968;&amp;#20010;&amp;#36827;&amp;#31243;&amp;#25104;&amp;#21151;&amp;#21019;&amp;#24314;&amp;#20102;lock file&amp;#21518;, &amp;#22312;&amp;#19981;&amp;#26126;&amp;#24322;&amp;#24120;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#32456;&amp;#27490;&amp;#20102;, &amp;#21518;&amp;#38754;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#24590;&amp;#20040;&amp;#21028;&amp;#26029;&amp;#21018;&amp;#25165;&amp;#34987;&amp;#21019;&amp;#24314;&amp;#30340;lock file&amp;#26159;&amp;#34987;&amp;#36827;&amp;#31243;&amp;#20351;&amp;#29992;&amp;#30340;?&lt;b&gt;&lt;font style="background-color:#b6d7a8"&gt; ( &amp;#20351;&amp;#29992;file lock&amp;#23601;&amp;#27809;&amp;#26377;&amp;#36825;&amp;#31181;&amp;#38382;&amp;#39064;, &amp;#24471;&amp;#21040;&amp;#38145;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#32456;&amp;#27490;&amp;#21518;&amp;#38145;&amp;#20250;&amp;#34987;&amp;#37322;&amp;#25918;, &amp;#26032;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#21487;&amp;#20197;&amp;#24471;&amp;#21040;)&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;br&gt;&amp;#20855;&amp;#20307;&amp;#22788;&amp;#29702;&amp;#26041;&amp;#24335;&amp;#21487;&amp;#20197;&amp;#21442;&amp;#32771;liblockfile&amp;#30340;&amp;#21407;&amp;#20195;&amp;#30721;:&lt;br&gt;&amp;nbsp;* http://liblockfile.sourcearchive.com/documentation/1.06.1/lockfile_8c-source.html&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#23427;&amp;#30340;&lt;font face="Courier New"&gt;lockfile_check&lt;/font&gt;&amp;#20989;&amp;#25968;&amp;#37324;, &amp;#20351;&amp;#29992;&amp;#21040;&amp;#20102;kill&amp;#20989;&amp;#25968;. &amp;#36825;&amp;#20010;kill&amp;#20989;&amp;#25968;&amp;#38656;&amp;#35201;&amp;#30340;pid&amp;#23601;&amp;#26159;xxx.pid&amp;#25991;&amp;#20214;&amp;#30340;pid&lt;br&gt;&lt;br&gt;&lt;h2&gt;&amp;#22240;&amp;#27492;:&lt;/h2&gt;xxx.pid&amp;#26377;&amp;#20004;&amp;#31181;&amp;#20316;&amp;#29992;:&lt;br&gt;1. &amp;#26041;&amp;#20415;daemon&amp;#34987;&amp;#25511;&amp;#21046;(&amp;#36890;&amp;#36807;signal)&lt;br&gt;2. &amp;#21487;&amp;#20197;&amp;#29992;&amp;#20110;&amp;#23454;&amp;#29616;&lt;b style="color:#ff0000"&gt;lock file&lt;br&gt;&lt;br&gt;&lt;/b&gt;&amp;#21033;&amp;#29992;&amp;#20102;1&amp;#19981;&amp;#19968;&amp;#23450;&amp;#21033;&amp;#29992;2, &amp;#20294;&amp;#26159;&amp;#20316;&amp;#29992;&amp;#20102;2&amp;#19968;&amp;#23450;&amp;#38656;&amp;#35201;&amp;#21033;&amp;#29992;1&lt;br&gt;&lt;br&gt;&lt;h3&gt;&amp;#21478;&amp;#22806;&lt;/h3&gt;&amp;#38500;&amp;#20102;&amp;#21033;&amp;#29992;kill&amp;#32473;&amp;#25351;&amp;#23450;&amp;#30340;pid&amp;#21457;signal&amp;#30340;&amp;#26041;&amp;#24335;&amp;#21435;&amp;#21028;&amp;#26029;&amp;#26576;&amp;#36827;&amp;#31243;&amp;#26159;&amp;#21542;&amp;#23384;&amp;#22312;&amp;#30340;&amp;#26041;&amp;#24335;&amp;#21518;, &amp;#36824;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#22914;&amp;#19979;URL&amp;#25552;&amp;#21040;&amp;#30340;&amp;#26041;&amp;#27861;:&lt;br&gt;http://stackoverflow.com/questions/2735926/how-to-capture-pid-of-a-linux-daemon-run-from-init-d&lt;br&gt;&lt;br&gt;&amp;#21033;&amp;#29992;/proc/NamePID/exe&amp;#24471;&amp;#21040;&amp;#30340;&amp;#23383;&amp;#31526;&amp;#20018;&amp;#26159;&amp;#21542;&amp;#20026;&amp;#20808;&amp;#21069;&amp;#22312;&amp;#36827;&amp;#34892;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#21517;. &amp;#36825;&amp;#31181;&amp;#26041;&amp;#27861;&amp;#38656;&amp;#35201;&amp;#30693;&amp;#36947;&amp;#36827;&amp;#31243;&amp;#30340;&amp;#21517;&amp;#31216;.&lt;br&gt;&lt;br&gt;&lt;h3&gt;&amp;#30097;&amp;#38382;&lt;/h3&gt;&amp;#26159;&amp;#21542;&amp;#20250;&amp;#20986;&amp;#29616;pid&amp;#21495;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#23384;&amp;#22312;, &amp;#20294;&amp;#19981;&amp;#26159;&amp;#33258;&amp;#24049;&amp;#26399;&amp;#26395;&amp;#30340;&amp;#36827;&amp;#31243;&amp;#21602;?&lt;br&gt;&amp;#26597;&amp;#38405;&amp;#20102;APUE&amp;#20063;&amp;#27809;&amp;#26377;&amp;#26126;&amp;#30830;, &amp;#21482;&amp;#30693;&amp;#36947;&amp;#26159;&amp;#26377;&amp;#19968;&amp;#23450;&amp;#30340;&amp;#31639;&amp;#27861;&amp;#21435;reuse &amp;#36827;&amp;#31243;&amp;#21495;&amp;#30340;.&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#36825;&amp;#26041;&amp;#38754;, &amp;#36824;&amp;#26159;flock&amp;#26041;&amp;#20415;, &amp;#19981;&amp;#36807;&amp;#27492;&amp;#20989;&amp;#25968;&amp;#19981;&amp;#26159;&amp;#25152;&amp;#26377;&amp;#22320;&amp;#26041;&amp;#37117;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#30340;, &amp;#32416;&amp;#32467;`~~&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4421179970317527633?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4421179970317527633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/xxxpidlock-file.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4421179970317527633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4421179970317527633'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/xxxpidlock-file.html' title='xxx.pid文件与lock file'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3831082735663293152</id><published>2010-05-20T07:00:00.001-07:00</published><updated>2010-05-21T08:03:46.683-07:00</updated><title type='text'>exec*族函数的好玩参数</title><content type='html'>&amp;#19968;&amp;#30452;&amp;#20197;&amp;#26469;&amp;#65292; &amp;#24863;&amp;#35273;exec*&amp;#26063;&amp;#20989;&amp;#25968;&amp;#37117;&amp;#26159;&amp;#27604;&amp;#36739;&amp;#20081;&amp;#30340;&amp;#12290; &amp;#26597;&amp;#26597;&amp;#25163;&amp;#20876;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#20998;&amp;#26469;&amp;#22914;&amp;#19979;&amp;#20960;&amp;#31867;:&lt;br&gt;l: stands for list&lt;br&gt;v: stands for vector , &amp;#31867;&amp;#20284;&amp;#20110;main&amp;#20013;&amp;#30340;argv&amp;#65292; &amp;#34920;&amp;#31034;&amp;#25968;&amp;#32452;&amp;#12290;&lt;br&gt;p: path&lt;br&gt;e: environment&lt;br&gt;&lt;br&gt;&amp;#26412;blog&amp;#19981;&amp;#26159;&amp;#24819;&amp;#20889;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20869;&amp;#23481;&amp;#30340;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#26412;&amp;#20154;&amp;#26159;&amp;#23545;execl*&amp;#37117;&amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#65292; execv*&amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#30340;&amp;#31532;&amp;#19968;&amp;#20010;&amp;#25104;&amp;#21592;&amp;#24863;&amp;#20852;&amp;#36259;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#24456;&amp;#26089;&amp;#20043;&amp;#21069;&amp;#23601;&amp;#23545;&amp;#36825;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#19981;&amp;#25026;&amp;#12290; &amp;#20363;&amp;#22914;&amp;#65306;&lt;br&gt;&lt;br&gt;os.execlp(&amp;quot;sleep&amp;quot;, &amp;#39;sleep&amp;#39;, &amp;#39;10&amp;#39;)&lt;br&gt;&amp;#24403;&amp;#21516;&amp;#20110;:&lt;br&gt;os.execvp(&amp;quot;sleep&amp;quot;, [&amp;#39;sleep&amp;#39;, &amp;#39;10])&lt;br&gt;&lt;br&gt;&amp;#30475;&amp;#19978;&amp;#21435;&amp;#24863;&amp;#35273;&amp;#19981;&amp;#26159;&amp;#24456;&amp;#22909;, &amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#29992;&amp;#26469;&amp;#24178;&amp;#22043;&amp;#30340;&amp;#65311; &amp;#20026;&amp;#20160;&amp;#20040;&amp;#35201;&amp;#37325;&amp;#22797;&amp;#20889;&amp;#20986;&amp;#26469;&amp;#65311; &lt;br&gt;&lt;br&gt;&amp;#20027;&amp;#35201;&amp;#26159;&amp;#22312;&amp;#19981;&amp;#30693;&amp;#36947;&amp;#37027;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#26159;&amp;#24178;&amp;#20160;&amp;#20040;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;, &amp;#20889;&amp;#24471;&amp;#21644;&amp;#31532;&amp;#19968;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#30456;&amp;#21516;, &amp;#25152;&amp;#20197;&amp;#23601;&amp;#26377;&amp;#36825;&amp;#31181;&amp;#37325;&amp;#22797;&amp;#30340;&amp;#24863;&amp;#35273;.&lt;br&gt;&lt;br&gt;&amp;#36215;&amp;#20160;&amp;#20040;&amp;#20316;&amp;#29992;&amp;#30340;&amp;#21602;? &amp;#30475;&amp;#19979;&amp;#38754;&amp;#21543;:&lt;br&gt;&lt;br&gt;jessinio@jessinio-laptop:/proc/7345$ &lt;b style="color:#ff0000"&gt;sleep 10&lt;/b&gt; &amp;amp;&lt;br&gt;[1] 7594&lt;br&gt;jessinio@jessinio-laptop:/proc/7345$ ps x|grep sleep&lt;br&gt;&amp;nbsp;7594 pts/10&amp;nbsp;&amp;nbsp; S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0:00 &lt;b style="color:#ff0000"&gt;sleep 10&lt;/b&gt;&lt;br&gt;jessinio@jessinio-laptop:/proc/7345$ &lt;b style="color:#0000ff"&gt;/bin/sleep 10&lt;/b&gt; &amp;amp;&lt;br&gt;[2] 7597&lt;br&gt;jessinio@jessinio-laptop:/proc/7345$ ps x|grep sleep&lt;br&gt;&amp;nbsp;7597 pts/10&amp;nbsp;&amp;nbsp; S&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 0:00 &lt;b style="color:#0000ff"&gt;/bin/sleep 10&lt;/b&gt;&lt;br&gt;&lt;br&gt;* &amp;#30456;&amp;#21516;&amp;#39068;&amp;#33394;&amp;#37096;&amp;#20998;&amp;#30340;&amp;#20851;&amp;#31995;: &amp;#30456;&amp;#21516;&amp;#30340;&lt;br&gt;* &amp;#27492;&amp;#23383;&amp;#31526;&amp;#20018;&amp;#26469;&amp;#33258;/proc/*/cmdline &amp;#25991;&amp;#20214;&amp;#20869;&amp;#30340;&amp;#20449;&amp;#24687;&lt;br&gt;&lt;br&gt;exec*&amp;#26063;&amp;#30340;&amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;(&amp;#23545;&amp;#20110;v&amp;#31867;&amp;#26159;&amp;#31532;&amp;#20108;&amp;#20010;&amp;#21442;&amp;#25968;&amp;#30340;&amp;#31532;&amp;#19968;&amp;#20010;&amp;#25104;&amp;#21592;)&amp;#26159;&amp;#36215;&amp;#21040;&amp;#26174;&amp;#31034;&amp;#30340;&amp;#20316;&amp;#29992;, &amp;#22914;:&lt;br&gt;&lt;br&gt;import os&lt;br&gt;import sys&lt;br&gt;&lt;br&gt;&lt;br&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pid = os.fork()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if pid == 0:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; child = [&amp;#39;&lt;b&gt;&lt;font color="#0000ff"&gt;i love linux&lt;/font&gt;&lt;/b&gt;&amp;#39;, &amp;#39;10&amp;#39;]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.execv(&amp;#39;/bin/sleep&amp;#39;, child)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print &amp;quot;%s&amp;quot; % pid&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os._exit(0)&lt;br&gt;&lt;br&gt;&amp;#36816;&amp;#34892;&amp;#24471;&amp;#21040;:&lt;br&gt;jessinio@jessinio-laptop:/tmp$ python exec_bin.py &lt;br&gt;7892&lt;br&gt;jessinio@jessinio-laptop:/tmp$ ps aux|grep 7892&lt;br&gt;jessinio&amp;nbsp; 7892&amp;nbsp; 0.0&amp;nbsp; 0.0&amp;nbsp;&amp;nbsp; 2956&amp;nbsp;&amp;nbsp; 628 pts/9&amp;nbsp;&amp;nbsp;&amp;nbsp; S&amp;nbsp;&amp;nbsp;&amp;nbsp; 21:55&amp;nbsp;&amp;nbsp; 0:00 &lt;b style="color:#0000ff"&gt;i love linux&lt;/b&gt; 10&lt;br&gt;&lt;br&gt;&amp;#26377;&amp;#28857;&amp;#19982;&amp;#20247;&amp;#19981;&amp;#21516;&amp;#30340;&amp;#29609;&amp;#27861;~~&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3831082735663293152?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3831082735663293152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/exec.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3831082735663293152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3831082735663293152'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/exec.html' title='exec*族函数的好玩参数'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3783427435725510145</id><published>2010-05-17T05:54:00.001-07:00</published><updated>2010-05-17T05:54:03.125-07:00</updated><title type='text'>进程成为daemonize需要fork两次吗?</title><content type='html'>&amp;#25104;&amp;#20026;&amp;#19968;&amp;#20010;daemonize&amp;#65292; &amp;#20854;&amp;#23454;&amp;#32593;&amp;#19978;&amp;#26377;&amp;#24456;&amp;#22810;&amp;#20363;&amp;#23376;&amp;#65292; &amp;#20063;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#65292; &amp;#27491;&amp;#22914;&amp;#65306;&lt;br&gt;&lt;a href="http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/" target="_blank"&gt;http://code.activestate.com/recipes/278731-creating-a-daemon-the-python-way/&lt;/a&gt;&lt;br&gt; &amp;#37324;&amp;#32473;&amp;#20986;&amp;#30340;&amp;#20363;&amp;#23376;&amp;#12290;&lt;br&gt;&lt;br&gt; &amp;#20294;&amp;#26159;&amp;#65292; &amp;#25105;&amp;#26080;&amp;#27861;&amp;#26126;&amp;#30333;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#35201;fork&amp;#20004;&amp;#27425;&amp;#65281;&amp;#65292; &amp;#19979;&amp;#38754;&amp;#26159;&amp;#25105;&amp;#30340;&amp;#27979;&amp;#35797;&amp;#65306;&lt;br&gt;&lt;br&gt; jessinio@jessinio-laptop:/tmp$ ps axj|head -n 1&lt;br&gt; &amp;nbsp;PPID &amp;nbsp; PID &amp;nbsp;PGID &amp;nbsp; SID TTY &amp;nbsp; &amp;nbsp; &amp;nbsp;TPGID STAT &amp;nbsp; UID &amp;nbsp; TIME COMMAND&lt;br&gt; jessinio@jessinio-laptop:/tmp$ ps axj|grep apache&lt;br&gt; &amp;nbsp; &amp;nbsp;1 &amp;nbsp;1820 &amp;nbsp;1820 &amp;nbsp;1820 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 Ss &amp;nbsp; &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; 0:10&lt;br&gt; /usr/sbin/apache2 -k start&lt;br&gt; &amp;nbsp;1820 16100 &amp;nbsp;1820 &amp;nbsp;1820 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 S &amp;nbsp; &amp;nbsp; 1000 &amp;nbsp; 0:00&lt;br&gt; /usr/sbin/apache2 -k start&lt;br&gt; &amp;nbsp;1820 16101 &amp;nbsp;1820 &amp;nbsp;1820 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 Sl &amp;nbsp; &amp;nbsp;1000 &amp;nbsp; 0:00&lt;br&gt; /usr/sbin/apache2 -k start&lt;br&gt; &amp;nbsp;1820 16129 &amp;nbsp;1820 &amp;nbsp;1820 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 Sl &amp;nbsp; &amp;nbsp;1000 &amp;nbsp; 0:00&lt;br&gt; /usr/sbin/apache2 -k start&lt;br&gt;&lt;br&gt;&lt;br&gt; &amp;#21487;&amp;#20197;&amp;#20013;&amp;#20174;&amp;#24471;&amp;#21040;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#65306;&lt;br&gt; daemonize&amp;#36827;&amp;#31243;&amp;#30340;PPID==1, PID==PGID==SID, &amp;#27809;&amp;#26377;tty&amp;#65288;&amp;#20026;&amp;#65311;&amp;#65289;&lt;br&gt;&lt;br&gt; &amp;#22914;&amp;#26524;&amp;#36825;&amp;#23601;&amp;#26159;daemonize&amp;#36827;&amp;#31243;&amp;#30340;&amp;#35201;&amp;#27714;&amp;#30340;&amp;#35805;&amp;#65292; &amp;#35831;&amp;#30475;&amp;#25105;&amp;#33258;&amp;#24049;&amp;#20889;&amp;#30340;python&amp;#20195;&amp;#30721;&amp;#65306;&lt;br&gt;&lt;br&gt; if __name__ == &amp;quot;__main__&amp;quot;:&lt;br&gt; &amp;nbsp; &amp;nbsp;pid = os.fork()&lt;br&gt; &amp;nbsp; &amp;nbsp;# child process&lt;br&gt; &amp;nbsp; &amp;nbsp;if pid == 0:&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os.setsid()&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;time.sleep(10)&lt;br&gt; &amp;nbsp; &amp;nbsp;else:&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;print &amp;#39;parent %s, child %s&amp;#39; % (os.getpid(), pid)&lt;br&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;os._exit(0)&lt;br&gt;&lt;br&gt; &amp;#20854;&amp;#20013;&amp;#21482;&amp;#26159;&amp;#35843;&amp;#29992;&amp;#20102;&amp;#19968;&amp;#27425;fork&amp;#20989;&amp;#25968;&amp;#12290;&amp;#19979;&amp;#38754;&amp;#26159;&amp;#23427;&amp;#30340;&amp;#36816;&amp;#34892;&amp;#32080;&amp;#26524;&amp;#65306;&lt;br&gt;&lt;br&gt; jessinio@jessinio-laptop:/tmp$ ps axj|head -n 1&lt;br&gt; &amp;nbsp;PPID &amp;nbsp; PID &amp;nbsp;PGID &amp;nbsp; SID TTY &amp;nbsp; &amp;nbsp; &amp;nbsp;TPGID STAT &amp;nbsp; UID &amp;nbsp; TIME COMMAND&lt;br&gt; jessinio@jessinio-laptop:/tmp$ python process.py&lt;br&gt; parent 26117, child 26118&lt;br&gt; jessinio@jessinio-laptop:/tmp$ ps axj|grep process&lt;br&gt; &amp;nbsp; &amp;nbsp;1 26118 26118 26118 ? &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -1 Ss &amp;nbsp; &amp;nbsp;1000 &amp;nbsp; 0:00 python process.py&lt;br&gt;&lt;br&gt;&lt;br&gt; &amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65292; PPID==1, PID==PGID==SID, &amp;#27809;&amp;#26377;tty&lt;br&gt;&lt;br&gt; &amp;#36825;&amp;#26159;&amp;#21542;&amp;#21487;&amp;#20197;&amp;#35748;&amp;#20026;&amp;#65306; &amp;#21482;fork&amp;#19968;&amp;#27425;&amp;#65292; &amp;#28982;&amp;#21518;&amp;#35843;&amp;#29992;setsid&amp;#23601;&amp;#21487;&amp;#20197;&amp;#25104;&amp;#20026;daemonize&amp;#36827;&amp;#31243;&amp;#20102;&amp;#21602;&amp;#65311;&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#20247;&amp;#22810;&amp;#19981;&amp;#35299;&amp;#30340;&amp;#24773;&amp;#20917;&amp;#19979;, &amp;#20915;&amp;#23450;&amp;#22909;&amp;#22909;&amp;#30475;&amp;#30475;&amp;#22307;&amp;#32463;: APUE &amp;#19968;&amp;#20070;. &lt;br&gt;&lt;br&gt;&amp;#20063;&amp;#24456;&amp;#39640;&amp;#20852;, &amp;#20174;&amp;#20013;&amp;#25214;&amp;#21040;&amp;#20102;&amp;#19968;&amp;#28857;&amp;#20449;&amp;#24687;: &lt;br&gt;&lt;br&gt;under system v-based systems, &lt;font color="#cc0000"&gt;some people recommend calling fork again&lt;/font&gt; at this point and having the parent terminate, the second child continues as the daemon, This guarantees that the daemon is not a session leader , which prevents it from acquiring a controlling terminal under the system v rules. alternatively, to avoid acquiring a controlling terminal, be sure to specify O_NOCTTY whenever opening a terminal device.&lt;br&gt;&lt;br&gt;fork&amp;#31532;&amp;#20108;&amp;#27425;&amp;#26159;&amp;#38450;&amp;#27490;&amp;#34987;&amp;#22312;&amp;#25171;&amp;#24320;&amp;#19968;&amp;#20010;terminal device&amp;#26102;&amp;#34987;&amp;#31995;&amp;#32479;&amp;#20998;&amp;#37197;&amp;#21040;controlling terminal&lt;br&gt;&lt;br&gt;&amp;#21482;&amp;#35201;&amp;#19981;&amp;#20081;open(&amp;#25110;&amp;#32773;&amp;#20351;&amp;#29992;O_NOCTTY&amp;#26159;&amp;#19981;&amp;#38656;&amp;#35201;fork&amp;#31532;&amp;#20108;&amp;#27425;&amp;#30340;.&lt;br&gt;&lt;br&gt;&amp;#35805;&amp;#21448;&amp;#35828;&amp;#22238;&amp;#26469;, linux&amp;#26159;&amp;#24590;&amp;#20040;&amp;#20998;&amp;#37197;controlling terminal&amp;#30340;&amp;#21602;?&lt;br&gt;&lt;br&gt;APUE&amp;#22312;&amp;#36825;&amp;#37324;&amp;#27809;&amp;#26377;&amp;#25552;&amp;#21040;linux, &amp;#21482;&amp;#26159;&amp;#25552;&amp;#21040;&amp;#20102;BSD&amp;#21644;system-V&amp;#30340;&amp;#19981;&amp;#21516;. &amp;#25628;&amp;#20102;&amp;#19968;&amp;#19979;, linux&amp;#21644;BSD&amp;#26159;&amp;#19968;&amp;#26679;&amp;#30340;, &amp;#20351;&amp;#29992;ioctl&amp;#24471;&amp;#21040;controlling terminal, URL: &lt;b&gt;http://linux.die.net/man/4/tty_ioctl&lt;br&gt;&lt;/b&gt;&amp;#22914;&amp;#19979;&amp;#24341;&amp;#29992;:&lt;b&gt;&lt;br&gt;&lt;br&gt;TIOCSCTTY int&lt;/b&gt; &lt;i&gt;arg&lt;/i&gt; Make the given tty the controlling tty of the current process.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3783427435725510145?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3783427435725510145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/05/daemonizefork.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3783427435725510145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3783427435725510145'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/05/daemonizefork.html' title='进程成为daemonize需要fork两次吗?'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4826198373787284471</id><published>2010-04-25T00:44:00.001-07:00</published><updated>2010-04-25T00:53:08.025-07:00</updated><title type='text'>办公机器安装centOS</title><content type='html'>&amp;#20026;&amp;#20102;&amp;#26041;&amp;#20415;&amp;#24037;&amp;#20316;&amp;#65292;&amp;#20915;&amp;#23450;&amp;#25226;&amp;#20998;&amp;#37197;&amp;#30340;&amp;#24037;&amp;#20316;&amp;#26426;&amp;#23433;&amp;#35013;centOS&amp;#29615;&amp;#22659;.&lt;br&gt;&amp;#34429;&amp;#28982;&amp;#26159;&amp;#19981;&amp;#20250;&amp;#22312;&amp;#33258;&amp;#24049;&amp;#30340;desktop&amp;#19978;&amp;#23433;&amp;#35013;centOS&amp;#36825;&amp;#31181;&amp;#29615;&amp;#22659;, &amp;#20294;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#20570;,&amp;#33267;&amp;#20110;&amp;#21487;&amp;#20197;&amp;#20351;&amp;#33258;&amp;#24049;&amp;#23545;&amp;#29983;&amp;#20135;&amp;#31995;&amp;#32479;&amp;#29615;&amp;#22659;&amp;#24120;&amp;#26377;&amp;#25509;&amp;#35302;&amp;#21543;.&lt;br&gt;&lt;br&gt;1. firefox (centOS 5.4&amp;#40664;&amp;#35748;&amp;#30340;firefox&amp;#29256;&amp;#26412;&amp;#22826;&amp;#20302;&amp;#65292;&amp;#26080;&amp;#27861;&amp;#23433;&amp;#35013;vimperator&amp;#12290;&amp;#21482;&amp;#33021;&amp;#19979;&amp;#36733;&amp;#26368;&amp;#26032;&amp;#29256;&amp;#26412;&amp;#30340;firefox&lt;br&gt;&amp;#19979;&amp;#36733;&amp;#30340;firefox&amp;#37117;&amp;#26159;&amp;#19968;&amp;#22534;bin&amp;#65292;&amp;#21487;&amp;#20197;&amp;#26041;&amp;#20415;&amp;#20351;&amp;#29992;(&amp;#39030;&amp;#22810;&amp;#23601;&amp;#26159;&amp;#19968;&amp;#20010;LD_LIBRARY_PATH&amp;#30340;&amp;#38382;&amp;#39064;),&amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;firefox&amp;#37197;&amp;#24102;&amp;#30340;&amp;#21551;&amp;#21160;&amp;#33050;&amp;#26412;,&amp;#25226;&lt;br&gt;MOZ_APPRUNNER_NAME=&amp;quot;./mozilla-bin&amp;quot;&lt;br&gt;&amp;#20462;&amp;#25913;&amp;#20026;:&lt;br&gt;MOZ_APPRUNNER_NAME=&amp;quot;./firefox-bin&amp;quot;&lt;br&gt;&lt;br&gt;&amp;#23433;&amp;#35013;&amp;#24120;&amp;#29992;&amp;#30340;&amp;#25554;&amp;#20214;:&lt;br&gt;&amp;nbsp;* vimperator&lt;br&gt;&amp;nbsp;* tree style&lt;br&gt;&amp;nbsp;* foxproxy&lt;br&gt;&lt;br&gt;2. &amp;#23433;&amp;#35013;&amp;#23383;&amp;#20307;:wenquanyi&lt;br&gt;&amp;#20174;&amp;#23448;&amp;#32593;&amp;#19979;&amp;#36733;:http://wenq.org/enindex.cgi&lt;br&gt;&amp;#23433;&amp;#35013;&amp;#26041;&amp;#27861;&amp;#21442;&amp;#29031;&amp;#23433;&amp;#35013;&amp;#21253;&amp;#37324;&amp;#30340;INSTALL&amp;#20869;Manual Installation with tgz package&amp;#19968;&amp;#33410;&lt;br&gt;&amp;#20854;&amp;#20013;&amp;#25552;&amp;#21040;&amp;#30340;:&lt;br&gt;FontPath /usr/share/fonts/wenquanyi/wqy-zenhei&lt;br&gt;&amp;#24212;&amp;#35813;&amp;#26159;&amp;#22312;Files&amp;#19968;&amp;#33410;&amp;#20013;,&amp;#20363;&amp;#22914;:&lt;br&gt;&lt;br&gt;Section &amp;quot;Files&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RgbPath&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;/usr/share/X11/rgb&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ModulePath&amp;nbsp;&amp;nbsp; &amp;quot;/usr/lib64/xorg/modules&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FontPath&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;unix/:7100&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FontPath&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;/usr/share/fonts/wenquanyi/wqy-zenhei&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FontPath&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;quot;built-ins&amp;quot;&lt;br&gt;EndSection&lt;br&gt;&lt;br&gt;&amp;#27880;&amp;#24847;:&lt;br&gt;2.1. &amp;#20462;&amp;#25913;xorg.conf&amp;#21069;&amp;#26368;&amp;#22909;&amp;#26159;&amp;#22791;&amp;#20221;&lt;br&gt;2.2. &amp;#20351;&amp;#29992;Xorg -configure&amp;#21487;&amp;#20197;&amp;#20135;&amp;#29983;&amp;#19968;&amp;#20221;&amp;#27979;&amp;#35797;&amp;#36807;&amp;#30340;xorg.conf&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&lt;br&gt;&lt;br&gt;3. &amp;#23433;&amp;#35013;scim&amp;#36755;&amp;#20837;&amp;#27861;&lt;br&gt;&amp;#36825;&amp;#37324;&amp;#19981;&amp;#36873;&amp;#25321;ibus&amp;#20027;&amp;#35201;&amp;#26159;centOS&amp;#19979;&amp;#30340;python&amp;#29256;&amp;#26412;&amp;#20063;&amp;#26159;&amp;#24456;&amp;#20302;&amp;#30340;(2.4), &amp;#26412;&amp;#20154;&amp;#36824;&amp;#24819;&amp;#25240;&amp;#33150;&amp;#21319;&amp;#32423;python, &amp;#25152;&amp;#20197;&amp;#20808;&amp;#20351;&amp;#29992;&amp;#19978;scim&amp;#20877;&amp;#35828;&amp;#21543;.&lt;br&gt;&amp;#20351;&amp;#29992;yum&amp;#23433;&amp;#35013;.&amp;#33267;&amp;#20110;scim&amp;#38656;&amp;#35201;&amp;#30340;&amp;#20960;&amp;#20010;&amp;#29615;&amp;#22659;&amp;#21464;&amp;#37327;,&amp;#26412;&amp;#20154;&amp;#20063;&amp;#26159;&amp;#19978;&amp;#23448;&amp;#32593;&amp;#25214;&amp;#30340;.&lt;br&gt;* &amp;#29616;&amp;#22312;firefox&amp;#20013;&amp;#36824;&amp;#26159;&amp;#25171;&amp;#19981;&amp;#20102;&amp;#20013;&amp;#25991;~~~&amp;#37057;&amp;#38391;. &amp;#20808;&amp;#36825;&amp;#26679;&amp;#21543;~~~&lt;br&gt;&lt;br&gt;run scim daemon: &lt;font face="Courier New"&gt;scim -f socket -c socket -d&lt;/font&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4826198373787284471?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4826198373787284471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/04/centos.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4826198373787284471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4826198373787284471'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/04/centos.html' title='办公机器安装centOS'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3007888492286164162</id><published>2010-03-30T04:17:00.001-07:00</published><updated>2010-03-30T04:38:40.355-07:00</updated><title type='text'>ext2文件系统</title><content type='html'>&lt;h2&gt;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#35201;&amp;#20102;&amp;#35299;ext2&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;?&lt;/h2&gt;&amp;#22240;&amp;#20026;&amp;#24819;&amp;#30693;&amp;#36947;quota&amp;#30340;&amp;#24037;&amp;#20316;&amp;#21407;&amp;#29702;&lt;br&gt;&lt;h2&gt;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#19981;&amp;#26159;ext3&amp;#25110;&amp;#32773;&amp;#26159;ext4&amp;#65311;&lt;/h2&gt;&lt;div&gt;&amp;#30456;&amp;#27604;&amp;#20043;&amp;#19979;&amp;#65292;ext2&amp;#20837;&amp;#38376;&amp;#27604;&amp;#36739;&amp;#31616;&amp;#21333;&lt;/div&gt;&lt;h2&gt;ext2&amp;#30340;&amp;#32467;&amp;#26500;&lt;/h2&gt;&lt;div id="gh9y" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_422sbmqx2ck_b" style="height:261.108px;width:648px"&gt;&lt;/div&gt;&amp;#39318;&amp;#20808;&amp;#30896;&amp;#21040;&amp;#20004;&amp;#20010;&amp;#27010;&amp;#24565;&amp;#65306;&lt;h3&gt;1. block&lt;/h3&gt;&lt;div&gt;&amp;#22312;ext2&amp;#30340;&amp;#36923;&amp;#36753;&amp;#19978;&amp;#65292; block&amp;#26159;&amp;#26368;&amp;#23567;&amp;#21333;&amp;#20301;&amp;#12290; &amp;#22823;&amp;#23567;&amp;#26159;512*N(N&amp;gt;2)&amp;#12290;512&amp;#26159;&amp;#29616;&amp;#22312;&amp;#24120;&amp;#29992;&amp;#30828;&amp;#30424;&amp;#30340;&amp;#25159;&amp;#21306;&amp;#22823;&amp;#23567;&amp;#12290;&amp;#36825;&amp;#20010;&amp;#22823;&amp;#23567;&amp;#21487;&amp;#20197;&amp;#36890;&amp;#36807;mkfs.ext2&amp;#30340;-b&amp;#21442;&amp;#25968;&amp;#25351;&amp;#23450;&amp;#12290;&lt;/div&gt;&lt;div&gt;&amp;#20854;&amp;#23454;&amp;#65292; &amp;#29616;&amp;#22312;&amp;#24050;&amp;#32463;&amp;#26377;&amp;#25159;&amp;#21306;&amp;#22823;&amp;#23567;&amp;#20026;4K&amp;#30340;&amp;#30828;&amp;#30424;&amp;#20102;&amp;#65292; &amp;#35265;DBA notes&amp;#30340;blog: &lt;a href="http://www.dbanotes.net/review/hard_drive_4k_sector.html" id="n.0r" title="http://www.dbanotes.net/review/hard_drive_4k_sector.html"&gt;http://www.dbanotes.net/review/hard_drive_4k_sector.html&lt;/a&gt;&lt;/div&gt;&lt;h3&gt;2. block group&lt;/h3&gt;ext2&amp;#25226;N&amp;#22810;&amp;#30340;block&amp;#21010;&amp;#20998;&amp;#25104;group&amp;#22788;&amp;#29702;&amp;#65292; &amp;#31216;&amp;#20026;block group&amp;#12290; &amp;#36825;&amp;#20010;&amp;#25968;&amp;#30446;&amp;#21487;&amp;#20197;&amp;#36890;&amp;#36807;mkfs.ext2&amp;#30340;-G&amp;#21442;&amp;#25968;&amp;#25351;&amp;#23450;.&lt;br&gt;&lt;br&gt;&lt;h2&gt;block group&amp;#30340;&amp;#20855;&amp;#20307;&amp;#32454;&amp;#33410;&lt;/h2&gt;&lt;div&gt;&amp;#20174;&amp;#22270;&amp;#20013;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#20986;, &amp;#27599;&amp;#20010;block group&amp;#26377;&amp;#20845;&amp;#37096;&amp;#20998;. &amp;#20854;&amp;#20013;&amp;#26377;&amp;#20108;&amp;#37096;&amp;#20998;&amp;#26159;&amp;#27599;&amp;#20010;block group&amp;#37117;&amp;#26159;&amp;#30456;&amp;#21516;&amp;#30340;:&lt;/div&gt;&lt;div&gt;1. super block:&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;#20027;&amp;#35201;&amp;#23384;&amp;#25918;&amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;&amp;#25972;&amp;#20307;&amp;#24773;&amp;#20917;&amp;#20449;&amp;#24687;, &amp;#22914;&lt;/div&gt;...(&amp;#34987;&amp;#25130;&amp;#26029;)...&lt;br&gt;&lt;div&gt;340 &amp;nbsp; __le32 &amp;nbsp;s_inodes_count; &amp;nbsp; /* Inodes count */&lt;/div&gt;&lt;div&gt;341 &amp;nbsp; __le32 &amp;nbsp;&lt;font style="background-color:#cfe2f3"&gt;s_blocks_count&lt;/font&gt;; &amp;nbsp; /* Blocks count */&lt;/div&gt;&lt;div&gt;342 &amp;nbsp; __le32 &amp;nbsp;s_r_blocks_count; /* Reserved blocks count */&lt;/div&gt;&lt;div&gt;343 &amp;nbsp; __le32 &amp;nbsp;s_free_blocks_count; &amp;nbsp;/* Free blocks count */&lt;/div&gt;&lt;div&gt;344 &amp;nbsp; __le32 &amp;nbsp;s_free_inodes_count; &amp;nbsp;/* Free inodes count */&lt;/div&gt;&lt;div&gt;345 &amp;nbsp; __le32 &amp;nbsp;s_first_data_block; /* First Data Block */&lt;/div&gt;&lt;div&gt;346 &amp;nbsp; __le32 &amp;nbsp;s_log_block_size; /* Block size */&lt;/div&gt;&lt;div&gt;347 &amp;nbsp; __le32 &amp;nbsp;s_log_frag_size; &amp;nbsp;/* Fragment size */&lt;/div&gt;&lt;div&gt;348 &amp;nbsp; __le32 &amp;nbsp;&lt;font style="background-color:#cfe2f3"&gt;s_blocks_per_group&lt;/font&gt;; /* # Blocks per group */&lt;/div&gt;&lt;div&gt;349 &amp;nbsp; __le32 &amp;nbsp;s_frags_per_group; &amp;nbsp;/* # Fragments per group */&lt;/div&gt;&lt;div&gt;350 &amp;nbsp; __le32 &amp;nbsp;&lt;font style="background-color:#ffffff"&gt;s_inodes_per_group&lt;/font&gt;; /* # Inodes per group */&lt;/div&gt;&lt;div&gt;...(&amp;#34987;&amp;#35009;&amp;#26029;)...&lt;/div&gt;&lt;br&gt;&lt;b&gt;&lt;font color="#0000ff"&gt;block group&amp;#25968;&amp;#30446; = s_blocks_count / s_blocks_per_group&lt;/font&gt;&lt;/b&gt;&lt;br&gt;&lt;b&gt;&amp;#27599;&amp;#20010;block group&amp;#30340;&amp;#24320;&amp;#22987;block&amp;#20301;&amp;#32622; = ((group_number - 1)* blocks_per_group)&lt;br&gt;&lt;/b&gt;* &amp;#36825;&amp;#37324;&amp;#30340;&amp;#24320;&amp;#22987;block&amp;#20301;&amp;#32622;&amp;#19981;&amp;#26159;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;! &amp;#30456;&amp;#24403;&amp;#20110;block&amp;#30340;&amp;#32534;&amp;#21495;&lt;br&gt;&lt;br&gt;&lt;div&gt;2. group descriptor&lt;/div&gt;&lt;div&gt;&amp;#36825;&amp;#37324;&amp;#20445;&amp;#23384;&amp;#20102;&amp;#27599;&amp;#20010;block group&amp;#30340;&amp;#19968;&amp;#20123;&amp;#37325;&amp;#35201;&amp;#20449;&amp;#24687;:&lt;/div&gt;&lt;br&gt;&lt;div&gt;106 struct ext2_group_desc&lt;/div&gt;&lt;div&gt;107 {&lt;/div&gt;&lt;div&gt;108 &amp;nbsp; __le32 &amp;nbsp;bg_block_bitmap; &amp;nbsp; &amp;nbsp;/* Blocks bitmap block */&lt;/div&gt;&lt;div&gt;109 &amp;nbsp; __le32 &amp;nbsp;bg_inode_bitmap; &amp;nbsp; &amp;nbsp;/* Inodes bitmap block */&lt;/div&gt;&lt;div&gt;110 &amp;nbsp; __le32 &amp;nbsp;bg_inode_table; &amp;nbsp; /* Inodes table block */&lt;/div&gt;&lt;div&gt;111 &amp;nbsp; __le16 &amp;nbsp;bg_free_blocks_count; /* Free blocks count */&lt;/div&gt;&lt;div&gt;112 &amp;nbsp; __le16 &amp;nbsp;bg_free_inodes_count; /* Free inodes count */&lt;/div&gt;&lt;div&gt;113 &amp;nbsp; __le16 &amp;nbsp;bg_used_dirs_count; /* Directories count */&lt;/div&gt;&lt;div&gt;114 &amp;nbsp; __le16 &amp;nbsp;bg_pad;&lt;/div&gt;&lt;div&gt;115 &amp;nbsp; __le32 &amp;nbsp;bg_reserved[3];&lt;/div&gt;&lt;div&gt;116 };&lt;/div&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30475;group descriptor&amp;#20445;&amp;#23384;&amp;#20102;&amp;#27599;&amp;#20010;block group&amp;#30340;&amp;#20351;&amp;#29992;&amp;#20449;&amp;#24687;.&lt;div&gt;group descriptor&amp;#20849;&amp;#20351;&amp;#29992;&amp;#30340;block&amp;#25968;&amp;#30446; = (sizeof(struct ext2_group_desc) * &lt;b&gt;&lt;font color="#0000ff"&gt;block group&amp;#25968;&amp;#30446;&lt;/font&gt;&lt;/b&gt;) / s_blocks_count&lt;/div&gt;&lt;div&gt;* &amp;#23384;&amp;#22312;&amp;#20313;&amp;#25968;&amp;#36824;&amp;#35201;&amp;#21152;1, &amp;#25991;&amp;#26723;&amp;#37324;&amp;#21482;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#35828;&amp;#30340;:&amp;nbsp;&lt;font face="Arial"&gt;rounded up if necessary, &amp;nbsp;&lt;a href="http://uranus.chrysocome.net/explore2fs/es2fs.htm" id="z8f5" title="&amp;#35265;&amp;#25991;&amp;#26723;"&gt;&amp;#35265;&amp;#25991;&amp;#26723;&lt;/a&gt;&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#19979;&amp;#38754;&amp;#37096;&amp;#20998;&amp;#26159;&amp;#27599;&amp;#20010;block group&amp;#19981;&amp;#21516;&amp;#30340;:&lt;/div&gt;&lt;br&gt;&lt;div&gt;3. block bitmap: &amp;#35760;&amp;#24405;&amp;#24403;&amp;#21069;block group&amp;#30340;block&amp;#20351;&amp;#29992;&amp;#24773;&amp;#20917;, &amp;#27599;&amp;#20010;bit&amp;#34920;&amp;#31034;&amp;#19968;&amp;#20010;block&amp;#26159;&amp;#21542;&amp;#34987;&amp;#20351;&amp;#29992;, 1&amp;#34920;&amp;#31034;&amp;#34987;&amp;#20351;&amp;#29992;, 0&amp;#34920;&amp;#31034;&amp;#27809;&amp;#26377;&amp;#34987;&amp;#20351;&amp;#29992;&lt;/div&gt;&lt;br&gt;&lt;div&gt;4. inode bitmap: &amp;#21644;block bitmap&amp;#30340;&amp;#20316;&amp;#29992;&amp;#19968;&amp;#26679;.&lt;/div&gt;&lt;br&gt;&lt;div&gt;5. inode table: &amp;nbsp;&amp;#23384;&amp;#25918;struct ext2_inode&amp;#25968;&amp;#25454;&amp;#32467;&amp;#26500;, &amp;#27599;&amp;#19968;&amp;#20010;struct ext2_inode&amp;#32467;&amp;#26500;&amp;#34920;&amp;#31034;&amp;#19968;&amp;#20010;&amp;#25991;&amp;#20214;. &amp;#25991;&amp;#20214;&amp;#30340;&amp;#23646;&amp;#24615;&amp;#37117;&amp;#23384;&amp;#25918;&amp;#20110;&amp;#36825;&amp;#20010;struct&amp;#37324;.&lt;/div&gt;&lt;br&gt;&lt;div&gt;6. data blocks: &amp;#20027;&amp;#35201;&amp;#26159;&amp;#23384;&amp;#25918;&amp;#25968;&amp;#25454;&amp;#30340;block.&lt;/div&gt;&lt;h2&gt;&amp;#27599;&amp;#20010;struct ext2_inode&amp;#26159;&amp;#24590;&amp;#20040;&amp;#32534;&amp;#21495;, &amp;#27599;&amp;#20010;block&amp;#26159;&amp;#24590;&amp;#20040;&amp;#23545;&amp;#24212;&amp;#19978;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;?&lt;/h2&gt;&amp;#19978;&amp;#38754;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#20013;, &amp;#36824;&amp;#26377;&amp;#20004;&amp;#20010;&amp;#38382;&amp;#39064;:&lt;div&gt;1. &amp;#27809;&amp;#26377;&amp;#25552;&amp;#21040;inode&amp;#32479;&amp;#19968;&amp;#20998;&amp;#37197;, &amp;#22914;: block group 2&amp;#26377;&amp;#21738;&amp;#20123;inode?&lt;/div&gt;&lt;div&gt;2. &amp;#27809;&amp;#26377;&amp;#25552;&amp;#21040;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;. &amp;#22914;&amp;#24590;&amp;#20040;&amp;#24471;&amp;#21040;block 1000&amp;#30340;4K bytes?&lt;br&gt;&lt;br&gt;&lt;/div&gt;&amp;#23454;&amp;#29616;&amp;#19978;, &amp;#36825;&amp;#20004;&amp;#31181;&amp;#20449;&amp;#24687;&amp;#37117;&amp;#26159;&amp;#36890;&amp;#36807;&amp;#35745;&amp;#31639;&amp;#24471;&amp;#21040;&amp;#30340;. &amp;#22522;&amp;#20110;&amp;#20004;&amp;#20010;&amp;#21069;&amp;#25552;:&lt;div&gt;1. &amp;#36923;&amp;#36753;&amp;#20998;&amp;#21306;&amp;#30340;&amp;#25159;&amp;#21306;&amp;#26159;&amp;#36830;&amp;#32493;&amp;#30340;. &amp;#20063;&amp;#23601;&amp;#26159;&amp;#35828;, block&amp;#37117;&amp;#26159;&amp;#36830;&amp;#32493;&amp;#30340;. &amp;#22914;: block 1, block 2, ...&lt;/div&gt;&lt;div&gt;2. block group&amp;#20063;&amp;#26159;&amp;#36830;&amp;#32493;&amp;#30340;. &amp;#22914;: block group 1, block group 2, ...&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#30693;&amp;#36947;block&amp;#21495;&amp;#30721;&amp;#27714;&amp;#24471;block&amp;#30340;&amp;#20301;&amp;#32622;:&lt;/div&gt;The block in that group (offset in blocks) = &amp;nbsp;block_number %s_blocks_per_group&lt;div&gt;&lt;br&gt;&amp;#30693;&amp;#36947;inode&amp;#21495;&amp;#30721;&amp;#27714;&amp;#24471;inode&amp;#30340;&amp;#20301;&amp;#32622;:&lt;br&gt;The inode in that group (offset in blocks) &amp;nbsp;= &amp;nbsp;inode_number % s_inodes_per_group&lt;/div&gt;&lt;div&gt;&amp;#36825;&amp;#26679;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#27599;&amp;#20010;block group&amp;#26377;&amp;#21738;&amp;#20123;inode, &amp;#27599;&amp;#20010;struct ext2_inode&amp;#32467;&amp;#26500;&amp;#34920;&amp;#31034;inode&lt;br&gt;&lt;br&gt;&amp;#20174;&amp;#20301;&amp;#32622;&amp;#22914;&amp;#26524;&amp;#24471;&amp;#21040;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;?&lt;div&gt;block group 1&amp;#30340;&amp;#24320;&amp;#22987;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;(&amp;#20063;&amp;#26159;block 1)&amp;#26159;&amp;#21487;&amp;#20197;&amp;#30452;&amp;#25509;&amp;#23547;&amp;#22336;:&lt;br&gt;The starting point for the file system is the superblock and is always located at an offset of 1024 bytes from the start of the file system.&lt;br&gt;* &amp;#25991;&amp;#20214;&amp;#31995;&amp;#32479;&amp;#21069;1024bytes&amp;#19981;&amp;#20351;&amp;#29992;.&lt;/div&gt;&lt;div&gt;&amp;#36825;&amp;#26679;&amp;#23601;&amp;#21487;&amp;#20197;&amp;#35745;&amp;#31639;&amp;#20986;&amp;#27599;&amp;#20010;block group&amp;#30340;&amp;#22320;&amp;#22336;, &amp;#28982;&amp;#21518;&amp;#20877;&amp;#27714;&amp;#24471;&amp;#32452;&amp;#20986;&amp;#30340;block&amp;#30340;&amp;#29289;&amp;#29702;&amp;#22320;&amp;#22336;.&lt;br&gt;&lt;br&gt;&lt;h2&gt;&amp;#24635;:&lt;/h2&gt;&lt;div&gt;&amp;#22768;&amp;#26126;: &amp;#20165;&amp;#20165;&amp;#26159;&amp;#20010;&amp;#20154;&amp;#30340;&amp;#35299;&amp;#29702;, &amp;#21518;&amp;#26524;&amp;#33258;&amp;#36127;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3007888492286164162?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3007888492286164162/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/03/ext2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3007888492286164162'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3007888492286164162'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/03/ext2.html' title='ext2文件系统'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-1120754178762308154</id><published>2010-03-29T04:20:00.003-07:00</published><updated>2010-03-29T04:24:41.888-07:00</updated><title type='text'>vsftpd的文件名编码</title><content type='html'>&lt;h2&gt;&amp;#38382;&amp;#39064;&amp;#30340;&amp;#26469;&amp;#30001;&lt;/h2&gt;&amp;#21069;&amp;#20960;&amp;#22825;&amp;#65292; &amp;#26379;&amp;#21451;&amp;#34987;&amp;#36825;&amp;#19968;&amp;#20010;&amp;#38656;&amp;#27714;&amp;#28902;&amp;#30528;&amp;#65306;&amp;#24076;&amp;#26395;freeBSD&amp;#19979;&amp;#30340;vsftpd&amp;#19981;&amp;#25226;&amp;#29992;&amp;#25143;(windows&amp;#29615;&amp;#22659;)&amp;#19978;&amp;#20256;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#21517;&amp;#20445;&amp;#23384;&amp;#20026;UTF&amp;#65293;8&amp;#65292;&amp;#21363;&amp;#24076;&amp;#26395;&amp;#26159;GBK&amp;#32534;&amp;#30721;&amp;#12290;&lt;br&gt;&amp;#22312;vsftpd&amp;#30340;&amp;#37197;&amp;#32622;&amp;#25991;&amp;#20214;&amp;#37324;&amp;#65292; &amp;#27809;&amp;#26377;&amp;#25552;&amp;#21040;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#37197;&amp;#32622;&amp;#39033;&amp;#12290;&lt;br&gt;&amp;#20110;&amp;#26159;&amp;#65292;&amp;#20852;&amp;#36259;&amp;#19968;&amp;#19978;&amp;#65292; &amp;#33258;&amp;#24049;&amp;#23601;&amp;#21435;&amp;#30475;vsftpd&amp;#30340;&amp;#20195;&amp;#30721;&amp;#20102;&amp;#12290; &amp;#37117;&amp;#26159;&amp;#25214;&amp;#20102;&amp;#19968;&amp;#22280;&amp;#65292;&amp;#26681;&amp;#26412;&amp;#27809;&amp;#26377;&amp;#25214;&amp;#21040;vsftpd&amp;#26159;&amp;#22914;&amp;#20309;&amp;#36716;&amp;#32534;&amp;#30721;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#12290;(linux&amp;#19979;&amp;#30340;&amp;#36719;&amp;#20214;&amp;#19981;&amp;#37117;&amp;#26159;&amp;#20351;&amp;#29992;libc&amp;#30340;iconv&amp;#20989;&amp;#25968;&amp;#30340;&amp;#21527;&amp;#65311;)&lt;br&gt;&amp;#20110;&amp;#26159;&amp;#24819;&amp;#20102;&amp;#19968;&amp;#19979;&amp;#65292;&amp;#36825;&amp;#31181;&amp;#32534;&amp;#30721;&amp;#36716;&amp;#25442;&amp;#19981;&amp;#26159;&amp;#30001;vsftpd&amp;#22788;&amp;#29702;&amp;#30340;&amp;#65292; &amp;#32780;&amp;#26159;&amp;#30001;&amp;#29992;&amp;#25143;&amp;#31471;&amp;#36719;&amp;#20214;&amp;#22788;&amp;#29702;&amp;#30340;&amp;#65292; &amp;#20063;&amp;#23601;&amp;#26159;&amp;#35828;ftp&amp;#21327;&amp;#35758;&amp;#26412;&amp;#36523;&amp;#26377;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#23450;&amp;#20041;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#29702;&amp;#30001;&amp;#65306;&lt;br&gt;1. server&amp;#31471;&amp;#26681;&amp;#26412;&amp;#19981;&amp;#30693;&amp;#36947;client&amp;#31995;&amp;#32479;&amp;#26159;&amp;#20351;&amp;#29992;&amp;#20160;&amp;#20040;&amp;#32534;&amp;#30721;&amp;#30340;&lt;br&gt;2. &amp;#22312;vsftpd&amp;#30340;&amp;#20195;&amp;#30721;&amp;#27809;&amp;#26377;&amp;#30475;&amp;#21040;&amp;#19968;&amp;#28857;&amp;#32534;&amp;#30721;&amp;#36716;&amp;#25442;&amp;#30340;&amp;#20195;&amp;#30721;&amp;#12290;&lt;br&gt;&lt;br&gt;&amp;#22312;&amp;#36825;&amp;#20004;&amp;#31181;&amp;#24773;&amp;#20917;&amp;#19979;&amp;#65292; &amp;#21482;&amp;#33021;&amp;#22312;&amp;#36890;&amp;#20449;&amp;#20013;&amp;#25351;&amp;#23450;&amp;#32534;&amp;#30721;&amp;#30340;&amp;#31867;&amp;#22411;&amp;#12290;&amp;#21327;&amp;#35758;&amp;#20013;&amp;#24212;&amp;#35813;&amp;#26377;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#23450;&amp;#20041;&amp;#12290;&lt;br&gt;&lt;br&gt;&lt;h2&gt;&amp;#26597;&amp;#21040;&amp;#30340;&amp;#25991;&amp;#26723;&lt;/h2&gt;&amp;#20110;&amp;#26159;&amp;#65292; &amp;#21435;&amp;#26597;&amp;#30475;RFC&amp;#25991;&amp;#26723;&amp;#65306; http://filezilla-project.org/specs/rfc2640.txt&lt;br&gt;&lt;br&gt;FTP&amp;#23545;FEAT&amp;#21629;&amp;#20196;&amp;#30340;&amp;#35201;&amp;#27714;&amp;#65306;&lt;br&gt;&lt;div style="margin-left:40px"&gt;3.3 Clients compliance&lt;br&gt;&amp;nbsp;&amp;nbsp; - Clients MUST support the FEAT command and recognize the &amp;quot;UTF8&amp;quot;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; feature (defined in 3.2 above) to determine if a server supports&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UTF-8 encoding.&lt;br&gt;&lt;/div&gt;* &amp;#27880;&amp;#24847;&amp;#20854;&amp;#20013;&amp;#30340;MUST&amp;#21333;&amp;#35789;&amp;#12290;&lt;br&gt;* client&amp;#31471;&amp;#26159;&amp;#19968;&amp;#23450;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#26381;&amp;#21153;&amp;#31471;&amp;#26159;&amp;#21542;&amp;#25903;&amp;#25345;UTF-8&amp;#30340;&lt;br&gt;&lt;br&gt;&amp;#19978;&amp;#38754;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65306; client&amp;#31471;&amp;#26159;&amp;#19968;&amp;#23450;&amp;#21487;&amp;#20197;&amp;#30693;&amp;#36947;&amp;#26381;&amp;#21153;&amp;#31471;&amp;#26159;&amp;#21542;&amp;#25903;&amp;#25345;UTF-8&amp;#30340;&lt;br&gt;&lt;h2&gt;&amp;#20351;&amp;#29992;wireshark&amp;#20998;&amp;#26512;&lt;/h2&gt;&amp;#30417;&amp;#21548;&amp;#32593;&amp;#32476;&amp;#26159;&amp;#26368;&amp;#26041;&amp;#20415;&amp;#21028;&amp;#26029;&amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#30340;&amp;#26041;&amp;#27861;&amp;#12290;&lt;br&gt;&amp;#22914;&amp;#26524;&amp;#26159;client&amp;#20256;&amp;#36865;&amp;#20102;UTF-8&amp;#23383;&amp;#33410;&amp;#27969;, &amp;#22312;client&amp;#21457;&amp;#20986;&amp;#30340;&amp;#36890;&amp;#20449;&amp;#25968;&amp;#25454;&amp;#20013;, &amp;#19968;&amp;#23450;&amp;#26159;UTF-8&amp;#30340;.&amp;#22914;&amp;#19979;&amp;#26159;&amp;#20351;&amp;#29992;wireshark&amp;#30417;&amp;#21548;&amp;#21040;&amp;#30340;client&amp;#35531;&amp;#27714;:&lt;br&gt;&lt;font style="background-color:#b6d7a8"&gt;7&amp;nbsp;&amp;nbsp; &amp;nbsp;18.059426&amp;nbsp;&amp;nbsp; &amp;nbsp;192.168.0.102&amp;nbsp;&amp;nbsp; &amp;nbsp;192.168.0.102&amp;nbsp;&amp;nbsp; &amp;nbsp;FTP&amp;nbsp;&amp;nbsp; &amp;nbsp;Request: MKD \346\226\260\346\226\207\344\273\266\345\244\271 (7)&lt;br&gt;&lt;font style="background-color:#ffffff"&gt;&amp;#30475;&amp;#21040;&amp;#24471;&amp;#21040;&amp;#19968;&amp;#20018;bytes, &amp;#36825;&amp;#20018;bytes&amp;#23601;&amp;#26159;UTF-8&amp;#25968;&amp;#25454;:&lt;/font&gt;&lt;br&gt;print(unicode(&amp;quot;\346\226\260\346\226\207\344\273\266\345\244\271&amp;quot;,&amp;quot;utf-8&amp;quot;))&lt;br&gt;&amp;#26032;&amp;#25991;&amp;#20214;&amp;#22841;&lt;br&gt;&lt;/font&gt;&lt;h2&gt;&amp;#27979;&amp;#35797;FEAT&amp;#21644;OPTS&amp;#21629;&amp;#20196;&lt;/h2&gt;&amp;#20851;&amp;#31995;feat&amp;#21644;opts&amp;#21629;&amp;#20196;&amp;#65292; &amp;#21487;&amp;#20197;&amp;#20174;&amp;#36825;&amp;#37324;&amp;#24471;&amp;#21040;&amp;#20449;&amp;#24687;&amp;#65306;http://www.networksorcery.com/enp/rfc/rfc2389.txt&lt;br&gt;&lt;div style="margin-left:40px"&gt;&lt;font face="Courier New"&gt; The File Transfer Protocol is, from time to time, extended with new&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt; commands, or facilities. Implementations of the FTP protocol cannot&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt; be assumed to all immediately implement all newly defined mechanisms.&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt; This document provides a mechanism by which clients of the FTP&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt; protocol can discover which new features are supported by a&lt;/font&gt;&lt;br&gt;&lt;font face="Courier New"&gt; particular FTP server.&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;feat&amp;#21644;opts&amp;#19981;&amp;#26159;user interface&amp;#65292; &amp;#23427;&amp;#26159;FTP&amp;#21327;&amp;#35758;&amp;#30340;&amp;#21629;&amp;#20196;&amp;#65292; &amp;#23601;&amp;#22914;HTTP&amp;#20013;&amp;#30340;session&amp;#21644;host&amp;#19968;&amp;#26679;&lt;br&gt;&amp;#25152;&amp;#20197;&amp;#20351;&amp;#29992;&amp;#23458;&amp;#25143;&amp;#31471;&amp;#26159;&amp;#26080;&amp;#27861;&amp;#30475;&amp;#21040;&amp;#30340;&amp;#65292; &amp;#27604;&amp;#22914;lftp&amp;#25110;&amp;#32773;ftp&lt;br&gt;&amp;#22909;&amp;#22312;ftp&amp;#21327;&amp;#35758;&amp;#26159;&amp;#26412;&amp;#25991;&amp;#21327;&amp;#35758;&amp;#65292; &amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;telnet&amp;#30475;&amp;#28165;&amp;#26970;&amp;#12290;&lt;br&gt;&lt;font style="background-color:#93c47d"&gt;$ telnet 192.168.0.102 21&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;Trying 192.168.0.102...&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;Connected to 192.168.0.102.&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;Escape character is &amp;#39;^]&amp;#39;.&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;220 (vsFTPd 2.2.2)&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;user jessinio&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;331 Please specify the password.&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;password&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;530 Please login with USER and PASS.&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;feat&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;211-Features:&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;EPRT&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;EPSV&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;MDTM&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;PASV&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;REST STREAM&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;SIZE&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;TVFS&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;&amp;nbsp;&lt;b style="color:#ff0000"&gt;UTF8&lt;/b&gt;&lt;/font&gt;&lt;br style="background-color:#93c47d"&gt;&lt;font style="background-color:#93c47d"&gt;211 End&lt;/font&gt;&lt;br&gt;&lt;br&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#25903;&amp;#25345;UTF-8&amp;#21151;&amp;#33021;&amp;#12290;&lt;br&gt;&lt;br&gt;opts&amp;#21629;&amp;#20196;&amp;#26159;&amp;#20026;&amp;#23454;&amp;#29616;ftp&amp;#26085;&amp;#30410;&amp;#22686;&amp;#21152;&amp;#30340;&amp;#21629;&amp;#20196;&amp;#32780;&amp;#23384;&amp;#22312;&amp;#30340;&amp;#12290;&amp;#19979;&amp;#38754;&amp;#27979;&amp;#35797;opts&amp;#21629;&amp;#20196;&amp;#65306;&lt;br&gt;&lt;font style="background-color:#93c47d"&gt;$ telnet 192.168.0.102 21&lt;br&gt;Trying 192.168.0.102...&lt;br&gt;Connected to 192.168.0.102.&lt;br&gt;Escape character is &amp;#39;^]&amp;#39;.&lt;br&gt;220 (vsFTPd 2.2.2)&lt;br&gt;user jessinio&lt;br&gt;331 Please specify the password.&lt;br&gt;ivwsydfku&lt;br&gt;530 Please login with USER and PASS.&lt;br&gt;opts utf on&lt;br&gt;501 Option not understood.&lt;br&gt;opts utf8 on&lt;br&gt;&lt;b style="color:#ff0000"&gt;200 Always in UTF8 mode.&lt;/b&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;&lt;h2&gt;&amp;#25163;&amp;#24037;&amp;#31105;&amp;#27490;vsftpd&amp;#30340;&amp;#21151;&amp;#33021;&lt;/h2&gt;&amp;#29616;&amp;#22312;&amp;#25226;vsftpd&amp;#20195;&amp;#30721;&amp;#37324;&amp;#30340;feat&amp;#21629;&amp;#20196;&amp;#21644;&amp;#23545;opts&amp;#21629;&amp;#20196;&amp;#36820;&amp;#22238;&amp;#20449;&amp;#24687;&amp;#20570;&amp;#19968;&amp;#19979;&amp;#20462;&amp;#25913;.&lt;br&gt;&lt;br&gt;&amp;#25226;features.c&amp;#25991;&amp;#20214;&amp;#20013;&amp;#30340;&lt;br&gt;vsf_cmdio_write_raw(p_sess, &amp;quot; UTF8\r\n&amp;quot;);&lt;br&gt;&amp;#21435;&amp;#25481;&lt;br&gt;&amp;#25226;opts.c&amp;#25991;&amp;#20214;&amp;#30340;handle_opts&amp;#20989;&amp;#25968;&amp;#20462;&amp;#25913;&amp;#25104;&amp;#22914;&amp;#19979;:&lt;br&gt;&amp;nbsp;14 void&lt;br&gt;&amp;nbsp;15 handle_opts(struct vsf_session* p_sess)&lt;br&gt;&amp;nbsp;16 {&lt;br&gt;&amp;nbsp;17&amp;nbsp;&amp;nbsp; str_upper(&amp;amp;p_sess-&amp;gt;ftp_arg_str);&lt;br&gt;&amp;nbsp;18&amp;nbsp;&amp;nbsp; //if (str_equal_text(&amp;amp;p_sess-&amp;gt;ftp_arg_str, &amp;quot;UTF8 ON&amp;quot;))&lt;br&gt;&amp;nbsp;19&amp;nbsp;&amp;nbsp; //{&lt;br&gt;&amp;nbsp;20&amp;nbsp;&amp;nbsp; //&amp;nbsp; vsf_cmdio_write(p_sess, FTP_OPTSOK, &amp;quot;Always in UTF8 mode.&amp;quot;);&lt;br&gt;&amp;nbsp;21&amp;nbsp;&amp;nbsp; //}&lt;br&gt;&amp;nbsp;22&amp;nbsp;&amp;nbsp; //else&lt;br&gt;&amp;nbsp;23&amp;nbsp;&amp;nbsp; //{&lt;br&gt;&amp;nbsp;24&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; vsf_cmdio_write(p_sess, FTP_BADOPTS, &amp;quot;Option not understood.&amp;quot;);&lt;br&gt;&amp;nbsp;25&amp;nbsp;&amp;nbsp; //}&lt;br&gt;&amp;nbsp;26 }&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-1120754178762308154?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/1120754178762308154/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/03/vsftpd_29.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1120754178762308154'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1120754178762308154'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/03/vsftpd_29.html' title='vsftpd的文件名编码'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-8983319095065777340</id><published>2010-03-10T08:19:00.001-08:00</published><updated>2010-03-10T08:27:07.477-08:00</updated><title type='text'>自己的域名与Blogger</title><content type='html'>&amp;#36890;&amp;#36807;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#22495;&amp;#21517;&amp;#65288;&amp;#22914;&amp;#26412;&amp;#20154;&amp;#20351;&amp;#29992;blog.jessinio.info&amp;#65289;&amp;#21435;&amp;#35775;&amp;#38382;&amp;#33258;&amp;#24049;&amp;#30340;Blogger&amp;#20869;&amp;#23481;&amp;#65292; &amp;#26089;&amp;#23601;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#20351;&amp;#29992;&amp;#30340;&amp;#20102;&amp;#12290; &lt;div&gt;&amp;#20294;&amp;#26159;&amp;#27809;&amp;#26377;&amp;#29702;&amp;#20250;&amp;#20854;&amp;#20013;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#32454;&amp;#33410;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#20170;&amp;#22825;&amp;#22312;&amp;#30475;DNS&amp;#26041;&amp;#38754;&amp;#30340;&amp;#30693;&amp;#35782;&amp;#26102;&amp;#65292; &amp;#31361;&amp;#28982;&amp;#23601;&amp;#23545;&amp;#36825;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#24863;&amp;#20852;&amp;#36259;&amp;#20102;&amp;#12290;&amp;#25552;&amp;#20986;&amp;#36825;&amp;#19968;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#65306;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#20351;&amp;#29992;blog.jessinio.info&amp;#21487;&amp;#20197;&amp;#35775;&amp;#38382;blogger&amp;#30340;&amp;#20869;&amp;#23481;&amp;#65311;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#19979;&amp;#38754;&amp;#20570;&amp;#19968;&amp;#19979;&amp;#27979;&amp;#35797;&amp;#65292; &amp;#38543;&amp;#20415;&amp;#29609;&amp;#19968;&amp;#19979;&amp;#12290;&lt;/div&gt;&amp;#26412;&amp;#20154;&amp;#30340;blog.jessinio.info&amp;#36890;&amp;#36807;browser&amp;#26159;&amp;#21487;&amp;#20197;&amp;#35775;&amp;#38382;&amp;#30340;&amp;#12290;&amp;#36825;&amp;#20063;&amp;#26159;Blogger&amp;#30340;&amp;#20869;&amp;#23481;&amp;#12290;&amp;#30475;&amp;#19968;&amp;#19979;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#65306;&lt;br&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;jessinio@jessinio-laptop:~$ ping blog.jessinio.info&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;PING &lt;font color="#FF0000"&gt;ghs.you8g.com&lt;/font&gt; (69.164.192.240) 56(84) bytes of data.&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;64 bytes from &lt;font color="#0000FF"&gt;li107-240.members.linode.com&lt;/font&gt; (69.164.192.240): icmp_seq=1 ttl=49 time=303 ms&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;64 bytes from &lt;font color="#0000FF"&gt;li107-240.members.linode.com&lt;/font&gt; (69.164.192.240): icmp_seq=2 ttl=49 time=304 ms&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&amp;#32593;&amp;#32476;&amp;#26159;&amp;#36890;&amp;#30340;&amp;#65292; &amp;#20063;&amp;#24456;&amp;#27491;&amp;#24120;&amp;#65292; &amp;#23601;&amp;#26159;&amp;#23545;&amp;#24212;&amp;#30528;&amp;#19968;&amp;#20010;IP&amp;#22320;&amp;#22336;&amp;#12290;&amp;#20294;&amp;#26159;&amp;#19968;&amp;#20010;&amp;#24456;&amp;#31070;&amp;#22855;&amp;#30340;&amp;#20107;&amp;#24773;&amp;#65306;&amp;#22312;browser&amp;#30340;&amp;#22320;&amp;#22336;&amp;#26639;&amp;#20013;&amp;#30452;&amp;#25509;&amp;#35775;&amp;#38382;&amp;#19978;&amp;#38754;&amp;#30340;IP&amp;#22320;&amp;#22336;&amp;#26159;&amp;#24471;&amp;#19981;&amp;#21040;blogger&amp;#30340;&amp;#20869;&amp;#23481;&amp;#30340;&amp;#65306;&lt;br&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;h1&gt;&lt;font face="arial, sans-serif"&gt;&lt;font size="3"&gt;Not Found&lt;/font&gt;&lt;/font&gt;&lt;/h1&gt;&lt;font face="arial, sans-serif"&gt;&lt;font size="3"&gt;The requested URL&amp;nbsp;&lt;font face="Courier New"&gt;/&lt;/font&gt;&amp;nbsp;was not found on this server.&lt;/font&gt;&lt;/font&gt;&lt;/blockquote&gt;&lt;br&gt;&lt;div&gt;* &amp;#21487;&amp;#20197;&amp;#20146;&amp;#33258;&amp;#35797;&amp;#19968;&amp;#35797;&amp;#65306;&amp;nbsp;&lt;a href="http://69.164.192.240/" id="kt33" title="http://69.164.192.240/"&gt;http://69.164.192.240/&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#20808;&amp;#30475;&amp;#19968;&amp;#19979;ping&amp;#21629;&amp;#20196;&amp;#30340;&amp;#32080;&amp;#26524;&amp;#26159;&amp;#20160;&amp;#20040;&amp;#24847;&amp;#24605;&amp;#65306;&lt;/div&gt;&lt;br&gt;&lt;div&gt;0. blog.jessinio.info&amp;#65292;&amp;#26412;&amp;#20154;&amp;#21019;&amp;#24314;&amp;#30340;&amp;#19968;&amp;#20010;CNAME&amp;#35760;&amp;#24405;&lt;/div&gt;&lt;div&gt;1.&amp;nbsp;&lt;font color="#ff0000"&gt;ghs.you8g.com&lt;font color="#000000"&gt;&amp;#65292; &amp;#20063;&amp;#26159;&amp;#19968;&amp;#20010;CNAME&amp;#35760;&amp;#24405;&amp;#65292;&amp;#25351;&amp;#21521;&amp;#30340;ANAME&amp;#35760;&amp;#24405;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font color="#000000"&gt;2. &lt;/font&gt;&lt;font color="#0000ff"&gt;li107-240.members.linode.com&amp;#65292;&amp;#25152;&amp;#35859;&amp;#30340;&amp;#27491;&amp;#35268;&amp;#20027;&amp;#26426;&amp;#21517;&amp;#65292;&amp;#20063;&amp;#20026;ANAME&lt;/font&gt;&lt;br&gt;&lt;/div&gt;&lt;div&gt;* http://tools.ietf.org/html/rfc1034&amp;#24182;&amp;#27809;&amp;#26377;&amp;#26126;&amp;#25991;&amp;#35268;&amp;#23450;&amp;#31105;&amp;#27490;CNAME&amp;#25351;&amp;#21521;CNAME&amp;#12290;&amp;#21482;&amp;#26159;&amp;#24314;&amp;#35758;&amp;#36991;&amp;#20813;&amp;#36825;&amp;#31181;&amp;#24773;&amp;#20917;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#36825;&amp;#26159;&amp;#20026;&amp;#20160;&amp;#20040;&amp;#30452;&amp;#25351;&amp;#35775;&amp;#38382;IP&amp;#22320;&amp;#22336;&amp;#24471;&amp;#19981;&amp;#21040;blogger&amp;#30340;&amp;#20869;&amp;#23481;&amp;#21602;&amp;#65311; &amp;#38590;&amp;#36947;&amp;#26159;&amp;#22240;&amp;#20026;blog.jessinio.info&amp;#26159;&amp;#19968;&amp;#20010;CNAME&amp;#30340;&amp;#38382;&amp;#39064;&amp;#65311;&amp;#20854;&amp;#23454;&amp;#36825;&amp;#19968;&amp;#24819;&amp;#27861;&amp;#26159;&amp;#34987;pass&amp;#25481;&amp;#30340;&amp;#12290;browser&amp;#21457;&amp;#20986;&amp;#30340;&amp;#35531;&amp;#27714;&amp;#24590;&amp;#20040;&amp;#21487;&amp;#33021;&amp;#21253;&amp;#25324;CNAME&amp;#20043;&amp;#31867;&amp;#30340;&amp;#20449;&amp;#24687;&amp;#30340;&amp;#22043;&lt;/div&gt;&lt;br&gt;browser&amp;#30340;&amp;#35831;&amp;#27714;&amp;#26126;&amp;#26174;&amp;#36824;&amp;#21253;&amp;#25324;&amp;#19968;&amp;#20010;&amp;#20449;&amp;#24687;&amp;#65306; Host&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#20026;&amp;#20102;&amp;#27714;&amp;#35777;&amp;#36825;&amp;#19968;&amp;#28857;&amp;#65292; &amp;#33258;&amp;#24049;&amp;#20889;&amp;#20102;&amp;#27573;&amp;#35831;&amp;#27714;&amp;#20195;&amp;#30721;&amp;#65292; &amp;#22240;&amp;#20026;&amp;#20026;&amp;#20102;&amp;#30475;&amp;#28165;&amp;#35531;&amp;#27714;&amp;#30340;&amp;#20855;&amp;#20307;&amp;#24773;&amp;#20917;&amp;#65292; &amp;#20195;&amp;#30721;&amp;#26159;&amp;#30452;&amp;#25509;&amp;#20351;&amp;#29992;socket&amp;#20889;&amp;#30340;&amp;#65306;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;import socket&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;import re&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;import os&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;import sys&amp;nbsp;&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;if __name__ == &amp;quot;__main__&amp;quot;:&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;blog_ip = socket.gethostbyname(&amp;quot;blog.jessinio.info&amp;quot;)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;s = socket.socket()&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;s.connect((blog_ip,80))&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;s.sendall(&amp;quot;&amp;quot;&amp;quot;GET / HTTP/1.1&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;Host: blog.jessinio.info&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.8) Gecko/20100214 Ubuntu/9.10 (karmic) Firefox/3.5.8&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;Accept-Language: en-us,en;q=0.5&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;Accept-Encoding: gzip,deflate&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;quot;&amp;quot;&amp;quot;)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;data = &amp;#39;&amp;#39;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;while True:&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;retval = s.recv(1024)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;if not retval: break&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;data += retval&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;s.close()&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;# &amp;#31532;&amp;#19968;&amp;#20010;&amp;#31354;&amp;#34892;&amp;#24320;&amp;#22987;&amp;#30340;&amp;#20869;&amp;#23481;&amp;#37117;&amp;#26159;browser&amp;#38656;&amp;#35201;&amp;#30340;&amp;#20869;&amp;#23481;&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;d = re.search(r&amp;#39;(\r\n|\n)\1(.*)&amp;#39;, data, re.S).group(2)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;f = open(&amp;quot;/tmp/blog.gz&amp;quot;, &amp;quot;w&amp;quot;)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;f.write(d)&lt;/font&gt;&lt;/div&gt;&lt;div&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;nbsp;&amp;nbsp;f.close()&lt;/font&gt;&lt;/div&gt;&lt;div&gt;* &amp;#24471;&amp;#21040;&amp;#30340;&amp;quot;/tmp/blog.gz&amp;quot;&amp;#26159;&amp;#19968;&amp;#20010;gzip&amp;#25991;&amp;#20214;, &amp;#21487;&amp;#20197;&amp;#20351;&amp;#29992;gunzip&amp;#35299;&amp;#21387;&amp;#19968;&amp;#30475;&amp;#23601;&amp;#26126;&amp;#30333;&lt;/div&gt;&lt;br&gt;&amp;#20174;&amp;#20195;&amp;#30721;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65292; &amp;#35775;&amp;#38382;IP&amp;#20043;&amp;#25152;&amp;#20197;&amp;#19981;&amp;#34892;&amp;#65292; &amp;#26159;&amp;#22240;&amp;#20026;ghs.google.com&amp;#38656;&amp;#35201;&amp;#24471;&amp;#21040;&amp;#35531;&amp;#27714;&amp;#20013;Host&amp;#21442;&amp;#25968;&lt;br&gt;&lt;br&gt;&lt;div&gt;&amp;#27880;&amp;#24847;: &amp;#35201;&amp;#24819;&amp;#20351;&amp;#29992;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#22495;&amp;#21517;&amp;#21435;&amp;#35775;&amp;#38382;blogger&amp;#26159;&amp;#38656;&amp;#35201;&amp;#22312;blogger&amp;#21518;&amp;#21488;&amp;#37324;&amp;#37197;&amp;#32622;&amp;#30340;, &amp;#36825;&amp;#19968;&amp;#37197;&amp;#32622;&amp;#25165;&amp;#33021;&amp;#20351;ghs.google.com&amp;#26681;&amp;#25454;&amp;#19981;&amp;#21516;&amp;#30340;Host&amp;#20540;&amp;#24471;&amp;#21040;&amp;#19981;&amp;#20986;&amp;#30340;blogger&amp;#24080;&amp;#21495;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-8983319095065777340?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/8983319095065777340/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/03/blogger.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8983319095065777340'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8983319095065777340'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/03/blogger.html' title='自己的域名与Blogger'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4660597070696490447</id><published>2010-02-26T00:45:00.001-08:00</published><updated>2010-02-26T00:56:31.488-08:00</updated><title type='text'>数字签名和数据加密</title><content type='html'>&amp;#21271;&amp;#20140;&amp;#36825;&amp;#20004;&amp;#22825;&amp;#30340;&amp;#38654;&amp;#29305;&amp;#21035;&amp;#22823;&amp;#65292; &amp;#21435;&amp;#36891;&amp;#26377;&amp;#20123;&amp;#19981;&amp;#29245;&amp;#65292; &amp;#21152;&amp;#19978;&amp;#36825;&amp;#20960;&amp;#22825;&amp;#37117;&amp;#26377;&amp;#20986;&amp;#21435;&amp;#36891;&amp;#65292; &amp;#24178;&amp;#33030;&amp;#20241;&amp;#24687;&amp;#19968;&amp;#22825;&amp;#65292; &amp;#22352;&amp;#30528;&amp;#30475;&amp;#30475;&amp;#25991;&amp;#26723; &lt;div&gt;&amp;#22909;&amp;#20037;&amp;#27809;&amp;#26377;&amp;#24590;&amp;#20040;&amp;#30475;&amp;#25991;&amp;#26723;&amp;#20102;&amp;#12290;&lt;/div&gt;&lt;br&gt;&amp;#19968;&amp;#27785;&amp;#19979;&amp;#21435;&amp;#65292;&amp;#23601;&amp;#34987;&amp;quot;&amp;#25968;&amp;#23383;&amp;#31614;&amp;#21517;&amp;quot;&amp;#36825;&amp;#19968;&amp;#27010;&amp;#24565;&amp;#25630;&amp;#24471;&amp;#20102;&amp;#28857;&amp;#20081;&amp;#65306;&lt;div&gt;1. &amp;#39318;&amp;#20808;&amp;#26159;android&amp;#25163;&amp;#26426;&amp;#19978;&amp;#30340;&amp;#19981;&amp;#21516;&amp;#31243;&amp;#24207;&amp;#35201;&amp;#24819;&amp;#20026;&amp;#21516;&amp;#19968;&amp;#20010;user ID, &amp;#19968;&amp;#23450;&amp;#38656;&amp;#35201;&amp;#31243;&amp;#24207;&amp;#30340;&amp;#25968;&amp;#23383;&amp;#31614;&amp;#21517;&amp;#30456;&amp;#21516;&lt;/div&gt;&lt;div&gt;2. &amp;#28982;&amp;#21518;&amp;#26159;ubuntu upgrade&amp;#26102;&amp;#20986;&amp;#29616;PGP error&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#37117;&amp;#26159;&amp;#19982;&amp;ldquo;&amp;#31614;&amp;#21517;&amp;rdquo;&amp;#36825;&amp;#19968;&amp;#27010;&amp;#24565;&amp;#25199;&amp;#19978;&amp;#20851;&amp;#31995;&amp;#30340;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#27785;&amp;#23601;&amp;#27785;&amp;#19979;&amp;#21435;&amp;#21543;&amp;#12290; &amp;#33457;&amp;#28857;&amp;#26102;&amp;#38388;&amp;#25630;&amp;#26126;&amp;#30333;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;h2&gt;&amp;#33258;&amp;#24049;&amp;#25152;&amp;#30693;&amp;#36947;&lt;/h2&gt;&lt;br&gt;&lt;div&gt;&amp;#21021;&amp;#35265;PGP&amp;#26102;&amp;#65292; &amp;#22823;&amp;#32422;&amp;#36824;&amp;#26159;&amp;#23398;&amp;#29983;&amp;#26178;&amp;#26399;&amp;#65292;&amp;#37027;&amp;#26102;&amp;#21482;&amp;#30693;&amp;#36947;&amp;#26377;PGP&amp;#36825;&amp;#20010;&amp;ldquo;&amp;#19996;&amp;#35199;&amp;ldquo;&amp;#65292; &amp;#22823;&amp;#27010;&amp;#20102;&amp;#35299;PGP&amp;#30340;&amp;#29992;&amp;#36884;&amp;#65306; &amp;#20445;&amp;#25252;&amp;#20010;&amp;#20154;&amp;#38544;&amp;#31169;&amp;#65292; &amp;#25968;&amp;#25454;&amp;#23433;&amp;#20840;&amp;#12290;&amp;#20294;&amp;#26159;&amp;#20013;&amp;#22269;&amp;#30340;&amp;#19968;&amp;#33324;&amp;#35745;&amp;#31639;&amp;#26426;&amp;#29992;&amp;#25143;&amp;#22522;&amp;#26412;&amp;#23601;&amp;#19981;&amp;#20250;&amp;#29702;&amp;#20250;&amp;#36825;&amp;#31181;&amp;#20107;&amp;#12290;&lt;/div&gt;&lt;div&gt;&amp;#20877;&amp;#35828;, &amp;#37027;&amp;#26102;&amp;#36824;&amp;#31639;&amp;#26159;&amp;#20010;&amp;#23567;&amp;#23567;&amp;#30333;. &amp;#25140;&amp;#30528;windows&amp;#30340;&amp;#38142;&amp;#38145;&amp;#22312;&amp;#36339;&amp;#33310;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#24037;&amp;#20316;&amp;#21518;&amp;#30896;&amp;#21040;ssh&amp;#30340;&amp;#65292; &amp;#20250;&amp;#30896;&amp;#21040;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;ldquo;&amp;#19982;&amp;rdquo;&amp;#31169;&amp;#38053;&amp;ldquo;&amp;#36825;&amp;#20004;&amp;#20010;&amp;#27010;&amp;#24565;&amp;#12290;&amp;#20851;&amp;#20110;&amp;#36825;&amp;#26041;&amp;#38754;&amp;#30340;&amp;#29702;&amp;#35770;&amp;#23601;&amp;#19981;&amp;#35828;&amp;#20102;&amp;#65292; &amp;#25628;&amp;#19968;&amp;#19979;&amp;#23601;&amp;#19968;&amp;#22534;&amp;#20449;&amp;#24687;&amp;#20986;&amp;#26469;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;h2&gt;PGP&amp;#19982;RSA&amp;#65292;DSA&amp;#30340;&amp;#20851;&amp;#31995;&lt;/h2&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&lt;font face="sans-serif"&gt;&lt;b&gt;Pretty Good Privacy&lt;/b&gt;&lt;/font&gt;&amp;nbsp;(&lt;b&gt;PGP&lt;/b&gt;) is a&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Computer_program" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Computer program"&gt;computer program&lt;/a&gt;&amp;nbsp;that provides&amp;nbsp;&lt;a class="mw-redirect" href="http://docs.google.com/wiki/Cryptographic" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Cryptographic"&gt;cryptographic&lt;/a&gt;&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Privacy" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Privacy"&gt;privacy&lt;/a&gt;&amp;nbsp;and&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Authentication" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Authentication"&gt;authentication&lt;/a&gt;. PGP is often used for signing, encrypting and decrypting e-mails to increase the security of e-mail communications. It was created by&amp;nbsp;&lt;a class="mw-redirect" href="http://docs.google.com/wiki/Philip_Zimmermann" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Philip Zimmermann"&gt;Philip Zimmermann&lt;/a&gt;&amp;nbsp;in 1991.&lt;/div&gt;&lt;/blockquote&gt;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65292; PGP&amp;#23601;&amp;#26159;&amp;#19968;&amp;#31181;&amp;#36719;&amp;#20214;&amp;#12290;&amp;#23427;&amp;#21033;&amp;#29992;&amp;#20102;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#29702;&amp;#35770;&amp;#12290;&lt;div&gt;RSA&amp;#65292; DSA&amp;#20026;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#30340;&amp;#19968;&amp;#31181;&amp;#20855;&amp;#20307;&amp;#26041;&amp;#24335;&amp;#12290;&lt;/div&gt;&lt;br&gt;&lt;h2&gt;&lt;font size="4"&gt;PGP&amp;#21644;GPG&lt;/font&gt;&lt;/h2&gt;&lt;div&gt;&amp;#20174;&amp;#21517;&amp;#23383;&amp;#30475;&amp;#19978;&amp;#21435;&amp;#24456;&amp;#32416;&amp;#32467;&amp;#65292; &amp;#23427;&amp;#20204;&amp;#37117;&amp;#26159;&amp;#31867;&amp;#20284;&amp;#30340;&amp;#19996;&amp;#35199;&lt;/div&gt;PGP&amp;#65306;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy" style="color:#551a8b"&gt;http://en.wikipedia.org/wiki/Pretty_Good_Privacy&lt;/a&gt;&lt;br&gt;&lt;div&gt;GPG&amp;#65306;&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/GNU_Privacy_Guard" style="color:#551a8b"&gt;http://en.wikipedia.org/wiki/GNU_Privacy_Guard&lt;/a&gt;&lt;/div&gt;&lt;br&gt;&lt;h2&gt;&lt;font size="4"&gt;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#30340;&amp;#21152;&amp;#23494;&amp;#19982;&amp;#35299;&amp;#23494;&lt;/font&gt;&lt;/h2&gt;RSA&amp;#65288;Rivest-Shamir-Adleman&amp;#65289;&amp;#31639;&amp;#27861;&amp;#26159;&amp;#19968;&amp;#31181;&amp;#22522;&amp;#20110;&amp;#22823;&amp;#25968;&amp;#19981;&amp;#21487;&amp;#33021;&amp;#36136;&amp;#22240;&amp;#25968;&amp;#20998;&amp;#35299;&amp;#20551;&amp;#35774;&amp;#30340;&amp;#20844;&amp;#21273;&amp;#20307;&amp;#31995;&amp;#12290;&amp;#31616;&amp;#21333;&amp;#22320;&amp;#35828;&amp;#23601;&amp;#26159;&amp;#25214;&amp;#20004;&amp;#20010;&amp;#24456;&amp;#22823;&amp;#30340;&amp;#36136;&amp;#25968;&amp;#65292;&amp;#19968;&amp;#20010;&amp;#20844;&amp;#24320;&amp;#21363;&amp;#20844;&amp;#38053;&amp;#65292;&amp;#21478;&amp;#19968;&amp;#20010;&amp;#19981;&amp;#21578;&amp;#35785;&amp;#20219;&amp;#20309;&amp;#20154;&amp;#65292;&amp;#21363;&amp;#31169;&amp;#38053;&amp;#12290;&amp;#36825;&amp;#20004;&amp;#20010;&amp;#23494;&amp;#21273;&amp;#26159;&amp;#20114;&amp;#34917;&amp;#30340;&amp;#65292;&amp;#23601;&amp;#26159;&amp;#35828;&amp;#29992;&amp;#20844;&amp;#21273;&amp;#21152;&amp;#23494;&amp;#30340;&amp;#23494;&amp;#25991;&amp;#21487;&amp;#20197;&amp;#29992;&amp;#31169;&amp;#21273;&amp;#35299;&amp;#23494;&amp;#65292;&amp;#21453;&amp;#36807;&amp;#26469;&amp;#20063;&amp;#19968;&amp;#26679;&lt;br&gt;&lt;h2&gt;&amp;#35777;&amp;#20070;&amp;#19982;&amp;#20844;&amp;#38053;&amp;#30340;&amp;#20851;&amp;#31995;&lt;/h2&gt;&lt;div&gt;&lt;a href="http://en.wikipedia.org/wiki/X.509"&gt;http://en.wikipedia.org/wiki/X.509&lt;/a&gt;&amp;nbsp;&amp;#39029;&amp;#38754;&amp;#21487;&amp;#20197;&amp;#30475;&amp;#21040;&amp;#65306;&lt;/div&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&lt;font face="sans-serif"&gt;In&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Cryptography" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Cryptography"&gt;cryptography&lt;/a&gt;,&amp;nbsp;&lt;b&gt;X.509&lt;/b&gt;&amp;nbsp;is an&amp;nbsp;&lt;a href="http://docs.google.com/wiki/ITU-T" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="ITU-T"&gt;ITU-T&lt;/a&gt;&amp;nbsp;standard for a&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Public_key_infrastructure" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Public key infrastructure"&gt;public key infrastructure&lt;/a&gt;&amp;nbsp;(PKI) for&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Single_sign-on" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Single sign-on"&gt;single sign-on&lt;/a&gt;&amp;nbsp;(SSO) and&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Privilege_Management_Infrastructure" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Privilege Management Infrastructure"&gt;Privilege Management Infrastructure&lt;/a&gt;&amp;nbsp;(PMI). X.509 specifies, amongst other things, standard formats for&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Public_key_certificate" style="background-color:initial;background-image:none;color:#5a3696;text-decoration:none" title="Public key certificate"&gt;public key certificates&lt;/a&gt;,&amp;nbsp;&lt;a class="mw-redirect" href="http://docs.google.com/wiki/Certificate_revocation_list" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Certificate revocation list"&gt;certificate revocation lists&lt;/a&gt;,&amp;nbsp;&lt;a class="mw-redirect" href="http://docs.google.com/wiki/Attribute_certificate" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Attribute certificate"&gt;attribute certificates&lt;/a&gt;, and a&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Certification_path_validation_algorithm" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Certification path validation algorithm"&gt;certification path validation algorithm&lt;/a&gt;.&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&lt;font face="sans-serif"&gt;X.509&amp;#26159;&amp;#35777;&amp;#20070;&amp;#32479;&amp;#19968;&amp;#30340;&amp;#26684;&amp;#24335;&amp;#26631;&amp;#20934;&lt;/font&gt;&lt;/div&gt;&lt;br&gt;&amp;#20174;&lt;a href="http://en.wikipedia.org/wiki/Public_key_certificate"&gt;http://en.wikipedia.org/wiki/Public_key_certificate&lt;/a&gt;&amp;nbsp;&amp;#30475;&amp;#21040;:&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&lt;font face="sans-serif"&gt;In&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Cryptography" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Cryptography"&gt;cryptography&lt;/a&gt;, a&amp;nbsp;&lt;b&gt;public key certificate&lt;/b&gt;&amp;nbsp;(also known as a&amp;nbsp;&lt;b&gt;digital certificate&lt;/b&gt;&amp;nbsp;or&amp;nbsp;&lt;b&gt;identity certificate&lt;/b&gt;) is an electronic document which uses a&amp;nbsp;&lt;a href="http://docs.google.com/wiki/Digital_signature" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Digital signature"&gt;digital signature&lt;/a&gt;&amp;nbsp;to bind together a&amp;nbsp;&lt;a class="mw-redirect" href="http://docs.google.com/wiki/Public_key" style="background-color:initial;background-image:none;color:#002bb8;text-decoration:none" title="Public key"&gt;public key&lt;/a&gt;&amp;nbsp;with an identity &amp;mdash; information such as the name of a person or an organization, their address, and so forth. The certificate can be used to verify that a public key belongs to an individual.&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;div&gt;&amp;#25105;&amp;#20204;&amp;#24179;&amp;#26102;&amp;#35828;&amp;#30340;&amp;quot;&amp;#25968;&amp;#23383;&amp;#35777;&amp;#20070;&amp;quot;&amp;#23601;&amp;#26159;&amp;#36825;&amp;#26679;&amp;#30340;&amp;#19968;&amp;#31181;&amp;#19996;&amp;#35199;: public key&amp;#20877;&amp;#21152;&amp;#19978;&amp;#19968;&amp;#22534;&amp;#20449;&amp;#24687;&amp;#25353;&amp;#29031;X.509&amp;#30340;&amp;#26684;&amp;#24335;&amp;#32452;&amp;#25104;&amp;#30340;&amp;#25991;&amp;#20214;&amp;#12290;&amp;nbsp;&lt;/div&gt;&lt;h2&gt;&amp;#30003;&amp;#35831;&amp;#35777;&amp;#20070;&amp;#30340;&amp;#36807;&amp;#31243;&lt;/h2&gt;&lt;blockquote class="webkit-indent-blockquote" style="border:none;margin:0 0 0 40px"&gt;&lt;div&gt;&lt;font face="arial"&gt;&lt;font size="2"&gt;&amp;#29992;&amp;#25143;&amp;#39318;&amp;#20808;&amp;#20135;&amp;#29983;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#23494;&amp;#38053;&amp;#23545;&amp;#65292;&amp;#24182;&amp;#23558;&amp;#20844;&amp;#20849;&amp;#23494;&amp;#38053;&amp;#21450;&amp;#37096;&amp;#20998;&amp;#20010;&amp;#20154;&amp;#36523;&amp;#20221;&amp;#20449;&amp;#24687;&amp;#20256;&amp;#36865;&amp;#32473;&amp;#35748;&amp;#35777;&amp;#20013;&amp;#24515;&amp;#12290;&amp;#35748;&amp;#35777;&amp;#20013;&amp;#24515;&amp;#22312;&amp;#26680;&amp;#23454;&amp;#36523;&amp;#20221;&amp;#21518;&amp;#65292;&amp;#23558;&amp;#25191;&amp;#34892;&amp;#19968;&amp;#20123;&amp;#24517;&amp;#35201;&amp;#30340;&amp;#27493;&amp;#39588;&amp;#65292;&amp;#20197;&amp;#30830;&amp;#20449;&amp;#35831;&amp;#27714;&amp;#30830;&amp;#23454;&amp;#30001;&amp;#29992;&amp;#25143;&amp;#21457;&amp;#36865;&amp;#32780;&amp;#26469;&amp;#65292;&amp;#28982;&amp;#21518;&amp;#65292;&amp;#35748;&amp;#35777;&amp;#20013;&amp;#24515;&amp;#23558;&amp;#21457;&amp;#32473;&amp;#29992;&amp;#25143;&amp;#19968;&amp;#20010;&amp;#25968;&amp;#23383;&amp;#35777;&amp;#20070;&amp;#65292;&amp;#35813;&amp;#35777;&amp;#20070;&amp;#20869;&amp;#21253;&amp;#21547;&amp;#29992;&amp;#25143;&amp;#30340;&amp;#20010;&amp;#20154;&amp;#20449;&amp;#24687;&amp;#21644;&amp;#20182;&amp;#30340;&amp;#20844;&amp;#38053;&amp;#20449;&amp;#24687;&amp;#65292;&amp;#21516;&amp;#26102;&amp;#36824;&amp;#38468;&amp;#26377;&amp;#35748;&amp;#35777;&amp;#20013;&amp;#24515;&amp;#30340;&amp;#31614;&amp;#21517;&amp;#20449;&amp;#24687;&amp;#12290;&amp;#25968;&amp;#23383;&amp;#35777;&amp;#20070;&amp;#30001;&amp;#29420;&amp;#31435;&amp;#30340;&amp;#35777;&amp;#20070;&amp;#21457;&amp;#34892;&amp;#26426;&amp;#26500;&amp;#21457;&amp;#24067;&amp;#12290;&amp;#25968;&amp;#23383;&amp;#35777;&amp;#20070;&amp;#21508;&amp;#19981;&amp;#30456;&amp;#21516;&amp;#65292;&amp;#27599;&amp;#31181;&amp;#35777;&amp;#20070;&amp;#21487;&amp;#25552;&amp;#20379;&amp;#19981;&amp;#21516;&amp;#32423;&amp;#21035;&amp;#30340;&amp;#21487;&amp;#20449;&amp;#24230;&amp;#12290;&lt;b&gt;&amp;#21487;&amp;#20197;&amp;#20174;&amp;#35777;&amp;#20070;&amp;#21457;&amp;#34892;&amp;#26426;&amp;#26500;&amp;#33719;&amp;#24471;&amp;#24744;&amp;#33258;&amp;#24049;&amp;#30340;&amp;#25968;&amp;#23383;&amp;#35777;&amp;#20070;&lt;/b&gt;&amp;#12290;&lt;/font&gt;&lt;/font&gt;&lt;/div&gt;&lt;/blockquote&gt;&lt;h2&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#25152;&amp;#35859;&amp;#30340;&amp;#31614;&amp;#21517;&lt;/font&gt;&lt;/h2&gt;&amp;#20174;wikipedia&amp;#37324;&amp;#25214;&amp;#21040;&amp;#19968;&amp;#24133;&amp;#24456;&amp;#22909;&amp;#30340;&amp;#22270;&amp;#29255;:&lt;div&gt;&lt;div id="p4n7" style="text-align:left"&gt;&lt;img src="http://docs.google.com/File?id=ddjdc2nr_408gxg7dwfk_b" style="height:482.936px;width:648px"&gt;&lt;/div&gt;&lt;br&gt;&amp;#22270;&amp;#20013;&amp;#35828;&amp;#26126;&amp;#20102;&amp;#31614;&amp;#21517;&amp;#21644;&amp;#35748;&amp;#35777;&amp;#30340;&amp;#36807;&amp;#31243;. &lt;b&gt;&lt;font style="background-color:#6fa8dc"&gt;&amp;#20294;&amp;#26159;&amp;#26377;&amp;#19968;&amp;#28857;&amp;#27809;&amp;#26377;&amp;#35828;&amp;#26126;&amp;#30340;: &amp;#35748;&amp;#35777;&amp;#31614;&amp;#21517;&amp;#26102;&amp;#24590;&amp;#20040;&amp;#30830;&amp;#35748;&amp;#20351;&amp;#29992;certificate(&amp;#20063;&amp;#23601;&amp;#26159;public key)&amp;#23601;&amp;#26159;&amp;#21457;&amp;#20986;&amp;#32773;&amp;#30340;&amp;#21602;?, &lt;/font&gt;&lt;font style="background-color:#b6d7a8"&gt;&amp;#38656;&amp;#35201;&amp;#23454;&amp;#29616;&amp;#36825;&amp;#31181;&amp;#35748;&amp;#35777;, &amp;#35201;&amp;#26377;&amp;#31532;&amp;#19977;&amp;#26041;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#30340;&amp;#23384;&amp;#22312;&lt;/font&gt;&lt;/b&gt;&lt;/div&gt;* certificate&amp;#21487;&amp;#33021;&amp;#20250;&amp;#21644;&amp;#25968;&amp;#25454;&amp;#25991;&amp;#20214;&amp;#19968;&amp;#36215;&amp;#21457;&amp;#20986;, &amp;#20063;&amp;#26377;&amp;#21487;&amp;#33021;&amp;#19981;&amp;#19968;&amp;#36215;&amp;#21457;&amp;#20986;.&lt;br&gt;&lt;h2&gt;&amp;#33258;&amp;#31614;&amp;#21517;&amp;#19982;&amp;#31532;&amp;#19977;&amp;#26041;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&lt;/h2&gt;&lt;div&gt;&amp;#20026;&amp;#20102;&amp;#20570;&amp;#21040;&amp;#35777;&amp;#26126;&amp;#26576;&amp;#19968;&amp;#20010;certificate&amp;#23601;&amp;#26159;&amp;#21457;&amp;#20986;&amp;#32773;&amp;#30340;&amp;#35777;&amp;#20070;, &amp;#20986;&amp;#29616;&amp;#20102;&amp;#31532;&amp;#19977;&amp;#26041;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;.&amp;nbsp;&lt;/div&gt;&lt;br&gt;&amp;#35828;&amp;#21040;&amp;#36825;&amp;#37324;, &amp;#24050;&amp;#32463;&amp;#19981;&amp;#26159;&amp;#25216;&amp;#26415;&amp;#38382;&amp;#39064;&amp;#20102;. &amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#27604;&amp;#30340;&amp;#23601;&amp;#26159;&amp;#20449;&amp;#29992;. &amp;#20351;&amp;#29992;&amp;#32773;&amp;#20351;&amp;#29992;&amp;#21069;&amp;#38656;&amp;#35201;&amp;#35748;&amp;#21516;&amp;#30340;&amp;#19968;&amp;#28857;: &amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#19978;&amp;#30340;&amp;#35777;&amp;#20070;&amp;#37117;&amp;#26159;&amp;#21487;&amp;#20449;&amp;#30340;.&lt;br&gt;&lt;br&gt;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#26377;&amp;#20004;&amp;#31181;&amp;#24615;&amp;#36136;&amp;#30340;:&lt;div&gt;1. &amp;#21830;&amp;#19994;&lt;/div&gt;&lt;div&gt;2. &amp;#38750;&amp;#21830;&amp;#19994;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#27880;: &amp;#19981;&amp;#21516;&amp;#30340;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#19981;&amp;#19968;&amp;#23450;&amp;#24418;&amp;#32593;&amp;#32476;. &amp;#26377;&amp;#20123;&amp;#35748;&amp;#35777;&amp;#26426;&amp;#26500;&amp;#26159;&amp;#29420;&amp;#31435;&amp;#30340;.&amp;nbsp;&lt;br&gt;&lt;br&gt;&lt;h2&gt;&lt;font style="background-color:#93c47d"&gt;&amp;#21033;&amp;#29992;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#23545;&amp;#25968;&amp;#25454;&amp;#36827;&amp;#34892;&amp;#21152;&amp;#23494;&lt;/font&gt;&lt;/h2&gt;&amp;#19978;&amp;#38754;&amp;#19968;&amp;#33410;: &amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#30340;&amp;#21152;&amp;#23494;&amp;#19982;&amp;#35299;&amp;#23494; &amp;#24050;&amp;#32463;&amp;#35828;&amp;#21040;&amp;#20102;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#26159;&amp;#21487;&amp;#20197;&amp;#25226;&amp;#25968;&amp;#25454;&amp;#36827;&amp;#34892;&amp;#21152;&amp;#23494;&amp;#30340;&amp;#12290; &amp;#20294;&amp;#26159;&amp;#23384;&amp;#22312;&amp;#19968;&amp;#20010;&amp;#38382;&amp;#39064;&amp;#65306; &amp;ldquo;&amp;#20844;&amp;#38053;&amp;ldquo;&amp;#20307;&amp;#31995;&amp;#30340;&amp;#21152;&amp;#23494;&amp;#19982;&amp;#35299;&amp;#23494;&amp;#36895;&amp;#24230;&amp;#26159;&amp;#24456;&amp;#24930;&amp;#30340;&amp;#12290;&lt;div&gt;&amp;#22312;&amp;#36825;&amp;#28857;&amp;#19978;&amp;#65292; &amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#36828;&amp;#36828;&amp;#27604;&amp;#19981;&amp;#19978;&amp;#23545;&amp;#31216;&amp;#21152;&amp;#23494;&amp;#26041;&amp;#27861;&amp;#24555;&amp;#12290;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br&gt;PGP&amp;#31867;&amp;#22411;&amp;#36719;&amp;#20214;&amp;#21017;&amp;#32467;&amp;#21512;&amp;#20102;&amp;ldquo;&amp;#20844;&amp;#38053;&amp;rdquo;&amp;#20307;&amp;#31995;&amp;#21644;&amp;#23545;&amp;#31216;&amp;#21152;&amp;#23494;&amp;#26041;&amp;#27861;&amp;#12290;&amp;#23427;&amp;#38500;&amp;#20102;&amp;#31614;&amp;#21517;&amp;#21151;&amp;#33021;&amp;#22806;&amp;#65292; &amp;#36824;&amp;#25552;&amp;#20379;&amp;#20102;&amp;#19968;&amp;#31181;&amp;#21151;&amp;#33021;&amp;#65306;&amp;#23545;&amp;#25968;&amp;#25454;&amp;#36827;&amp;#34892;&amp;#21152;&amp;#23494;&amp;#65292; &amp;#23454;&amp;#29616;&amp;#25968;&amp;#25454;&amp;#22312;&amp;#20256;&amp;#36755;&amp;#36807;&amp;#31243;&amp;#20013;&amp;#23433;&amp;#20840;&amp;#24615;&amp;#12290;&amp;nbsp;&lt;/div&gt;&lt;br&gt;&lt;div&gt;&amp;#23454;&amp;#29616;&amp;#26041;&amp;#27861;&amp;#65306; &amp;#27599;&amp;#27425;&amp;#20351;&amp;#29992;PGP&amp;#36719;&amp;#20214;&amp;#26102;&amp;#65292;PGP&amp;#37117;&amp;#38543;&amp;#26426;&amp;#20135;&amp;#29983;&amp;#19968;&amp;#20010;128&amp;#20301;&amp;#30340;IDEA&amp;#20250;&amp;#35805;&amp;#23494;&amp;#38053;&amp;#65292;&amp;#29992;IDEA&amp;#23494;&amp;#38053;&amp;#26469;&amp;#21152;&amp;#23494;&amp;#38656;&amp;#35201;&amp;#20256;&amp;#36755;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#65288;&amp;#23545;&amp;#31216;&amp;#21152;&amp;#23494;&amp;#65289;&amp;#12290;&amp;#28982;&amp;#21518;&amp;#20351;&amp;#29992;&amp;#20844;&amp;#38053;&amp;#23545;IDEA&amp;#23494;&amp;#38053;&amp;#21152;&amp;#23494;&amp;#65292;&amp;#36825;&amp;#20004;&amp;#27425;&amp;#21152;&amp;#23494;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#34987;&amp;#19968;&amp;#24182;&amp;#20256;&amp;#36755;&amp;#12290; &amp;#36890;&amp;#36807;&amp;#36825;&amp;#31181;&amp;#26041;&amp;#27861;&amp;#38388;&amp;#25509;&amp;#22320;&amp;#20445;&amp;#25252;&amp;#38656;&amp;#35201;&amp;#20256;&amp;#36755;&amp;#30340;&amp;#25968;&amp;#25454;&amp;#20869;&amp;#23481;&lt;/div&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4660597070696490447?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4660597070696490447/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/02/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4660597070696490447'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4660597070696490447'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/02/blog-post.html' title='数字签名和数据加密'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-392871708603220661</id><published>2010-01-21T02:44:00.001-08:00</published><updated>2010-01-21T02:44:27.866-08:00</updated><title type='text'>**作为C函数参数(2)</title><content type='html'>之前写了一篇&amp;lt;&amp;lt;**作为C函数参数&amp;gt;&amp;gt;的文章。 今天又看到这个样的代码。 不过， 比之前的多一点需要注意的地方&lt;br&gt;在glibc/login/login.c代码里：&lt;br&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;static int &lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;tty_name (int fd, char **tty, size_t buf_len)&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;{&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;.....((被切掉).....&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;&amp;nbsp; if (rv == 0)&lt;/span&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; /*&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp; 这里 *tty = buf已经修改了tty这个变量指向的空间. &lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为什么不在改变前把传入的空间free掉呢?如:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果不free掉, 使用这个函数前需要有另外一个变量引用这块空间&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;不用调用free, 是因为login里, _tty是一个局部变量, 会在函数退出后自己释放&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; */&lt;br&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *tty = buf;&amp;nbsp;&amp;nbsp; /* Return buffer to the user.&amp;nbsp; */&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;&amp;nbsp; else if (buf != *tty)&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; free (buf);&amp;nbsp;&amp;nbsp; /* Free what we malloced when returning an error.&amp;nbsp; */&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;&amp;nbsp; return rv;&lt;/span&gt;&lt;br style="background-color: rgb(255, 217, 102);"&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;}&lt;br&gt;&lt;br&gt;&lt;span style="background-color: rgb(255, 255, 255);"&gt;作者还是清楚的:&lt;/span&gt;&lt;/span&gt;&lt;br&gt;#ifdef PATH_MAX&lt;br&gt;&amp;nbsp; char _tty[PATH_MAX + UT_LINESIZE];&lt;br&gt;#else&lt;br&gt;&amp;nbsp; char _tty[512 + UT_LINESIZE];&lt;br&gt;#endif&lt;br&gt;&amp;nbsp; char *tty = _tty;&lt;br&gt;.....&lt;br&gt;found_tty = tty_name (STDIN_FILENO, &amp;amp;tty, sizeof (_tty));&lt;br&gt;&lt;br&gt;看出, 有两个变量指向那块空间. 还是数组, 安全得很呢.&lt;br&gt;&lt;br&gt;因此, 如果**作为参数时:&lt;br&gt;1. 如果在函数内, 改变了**指向的内存, 这时, **不是指向通过malloc得到的内存是安全的&lt;br&gt;2. 否则, 请确保还有其它变量引用之&lt;br&gt;&lt;br&gt;如:&lt;br&gt;&lt;br&gt;int len = 100;&lt;br&gt;char *name = (char *)malloc( len );&lt;br&gt;char * other = name;&lt;br&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;tty_name (1, &amp;amp;name, len)&lt;/span&gt;&lt;br&gt;&lt;br&gt;或者是:&lt;br&gt;&lt;br&gt;char name[100];&lt;br&gt;char *new = name;&lt;br&gt;&lt;span style="background-color: rgb(255, 217, 102);"&gt;tty_name (1, &amp;amp;new, sizeof( name ))&lt;/span&gt;;&lt;br&gt;&lt;br&gt;这种做法:&lt;br&gt;char name[100];&lt;br&gt;&lt;br /&gt;char *new = name;&lt;br&gt;&lt;br&gt;可以像malloc一样得到内存, 但是它比较安全: 会自动根据变量的作用范围释放使用的内存.&lt;br&gt;&lt;br&gt;这种细节, 处理又麻烦, 不处理又不对. 纠结.... 需要长期的code能力.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-392871708603220661?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/392871708603220661/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/c2.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/392871708603220661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/392871708603220661'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/c2.html' title='**作为C函数参数(2)'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-1990668148170798540</id><published>2010-01-20T22:19:00.001-08:00</published><updated>2010-01-20T22:19:47.123-08:00</updated><title type='text'>man手册里的section 2和section 3</title><content type='html'>一直对section 2 和 section 3两个段的API分得不是很开.&lt;br&gt;&lt;br&gt;section 2和3的说明:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2&amp;nbsp;&amp;nbsp; System calls (functions provided by the kernel)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3&amp;nbsp;&amp;nbsp; Library calls (functions within program libraries)&lt;br&gt;&lt;br&gt;当然, 本人是分得到system calls和library calls的.&lt;br&gt;&lt;br /&gt;只是这两者的API有部分是一样的.&lt;br&gt;&lt;br&gt;可以man 2 setgid和man 3 setgid. 可以发现, 差不多是一个屁样了.&lt;br&gt;&lt;br&gt;3的存在, 是因为glibc需要有posix标准的一套API. 如glibc的setgid函数其实就是调用了system call的setgid API.&lt;br&gt;&lt;br&gt;往往对section 2和3的API出现混淆. 举个例子吧:&lt;br&gt;&lt;br&gt;#include &amp;lt;sys/types.h&amp;gt;&lt;br&gt;#include &amp;lt;sys/stat.h&amp;gt;&lt;br&gt;#include &amp;lt;fcntl.h&amp;gt;&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp; int fd = open("/tmp", O_DIRECTORY|O_RDONLY);&lt;br&gt;&amp;nbsp; if(fd &amp;gt;=0)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("sucess\n");&lt;br&gt;&amp;nbsp; else&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("no sucess\n");&lt;br&gt;}&lt;br&gt;编译时使用: gcc&amp;nbsp; /tmp/c2.c&amp;nbsp; &lt;b style="color: rgb(255, 0, 0);"&gt;-D _GNU_SOURCE&lt;/b&gt; -o /tmp/a.out&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;这时的open是使用system call的open, 可以打开一个文件夹的&lt;/b&gt;, 手册是man 2 open里说的内容.&lt;br&gt;&lt;br&gt;如果不用_GNU_SOURCE这个宏的话, 就是man 3 open里说的内容&lt;br&gt;&lt;br&gt;对特同名这种函数, 使用了宏去控制&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-1990668148170798540?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/1990668148170798540/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/mansection-2section-3.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1990668148170798540'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1990668148170798540'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/mansection-2section-3.html' title='man手册里的section 2和section 3'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2179278126349736405</id><published>2010-01-20T09:00:00.001-08:00</published><updated>2010-01-20T09:00:39.921-08:00</updated><title type='text'>取大文件最后N行数据</title><content type='html'>取大文件最后N行数据, 这个问题, 如果是我想的话, 就直接往'\n'字符里去想了:&lt;br&gt;1. 使用seek, 从后面读一块数据出.&lt;br&gt;2. 数'\n'的个数.&lt;br&gt;&lt;br&gt;看到人家这样做:&lt;br&gt;&lt;br&gt;import os&lt;br&gt;&lt;br&gt;def tail (name, n_line):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = []&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; f = file (name)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while len(lines) &amp;lt;= n_line:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // -n_line * 80 是一个大概猜测的一块数据长度&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; f.seek (-n_line * 80 * n, os.SEEK_END)&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 当 len( lines ) &amp;gt; n_line 才跳出循环, 其中, &lt;b&gt;lines[0]行的数据不一定是完整的&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 这代码的好处就是当最小条件跳出循环时, len( lines ) ==4 . 就算lines[0]是不完整的数据也没有关系. 因为只想取len(lines) - 1 行的数据.&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;lines = f.readlines()&lt;br&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; n = n + 1&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = f.seek (0, os.SEEK_SET)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; lines = f.readlines ()&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return lines[-n_line:]&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2179278126349736405?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2179278126349736405/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/n.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2179278126349736405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2179278126349736405'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/n.html' title='取大文件最后N行数据'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-1628096480339876127</id><published>2010-01-20T02:48:00.001-08:00</published><updated>2010-01-20T02:48:33.148-08:00</updated><title type='text'>[] 操作符用于函数参数</title><content type='html'>glibc/locale/setlocale.c文件里&lt;br&gt;&lt;br&gt;113 /* Construct a new composite name.&amp;nbsp; */&lt;br&gt;114 static char *&lt;br&gt;115 new_composite_name (int category, const char *newnames[__LC_LAST])&lt;br&gt;&lt;br&gt;这种代码奶奶的还真没有看过. 一般都是直接使用指针做参数的. 这里使用了 &lt;b&gt;数组的形式&lt;/b&gt; 做参数. 有什么好处呢?&lt;br&gt;&lt;br&gt;朋友给出了一个简单的例子说明了道理:&lt;br&gt;&lt;span dir="ltr" id=":v2"&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;void test(char *p[2])&lt;br&gt;{&lt;br&gt; &amp;nbsp; &amp;nbsp;puts(&lt;b style="color: rgb(0, 0, 255);"&gt;p[1]&lt;/b&gt;);&lt;br&gt;}&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt; &amp;nbsp; &amp;nbsp;char *p[2] = {"hello\0","world\0"};&lt;br&gt; &amp;nbsp; &amp;nbsp;test(p);&lt;br&gt;}&lt;br&gt;输出为:&lt;br&gt;&lt;/span&gt;world&lt;br&gt;&lt;div id=":b" class="kd"&gt;&amp;nbsp;&lt;br&gt;之所以使用数组的形式传参, 主要是为了方便地址偏移方便. 如果不是这样的话, 偏移时需要计算一下, 自己的例子说明:&lt;br&gt;&lt;br&gt;&lt;br&gt;void test(char **p)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; puts(&lt;b style="color: rgb(255, 0, 0);"&gt;*(p + 1)&lt;/b&gt;);&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; char *p[2] = {"hello\0","world\0"};&lt;br&gt;&amp;nbsp;&amp;nbsp; test(p);&lt;br&gt;}&lt;br&gt;&lt;br&gt;重点被颜色的文字标出&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;br&gt;顺便来一个整数偏移:&lt;br&gt;&lt;br&gt;void test(char **p)&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;// convert pointer to int&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; int number = (int )p;&lt;br&gt;&amp;nbsp;&amp;nbsp; &lt;b&gt;// convert int to pointer&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp; // 可以看出, 指针变量加1是偏移4bytes, 如果使用整数的话, 还需要自己计算&lt;br&gt;&amp;nbsp;&amp;nbsp; p = (char **) (&lt;b style="color: rgb(255, 0, 0);"&gt;number + 4&lt;/b&gt;);&lt;br&gt;&amp;nbsp;&amp;nbsp; puts(*(p));&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp; char *p[2] = {"hello\0","world\0"};&lt;br&gt;&amp;nbsp;&amp;nbsp; test(p);&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-1628096480339876127?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/1628096480339876127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post_20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1628096480339876127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1628096480339876127'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post_20.html' title='[] 操作符用于函数参数'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7360315346192464846</id><published>2010-01-20T01:33:00.001-08:00</published><updated>2010-01-20T02:02:59.127-08:00</updated><title type='text'>**作为C函数参数</title><content type='html'>C的指针一旦多层. 读代码是相当难理解.&lt;br&gt;&lt;br&gt;glibc/string/argz-ctsep.c里:&lt;br&gt;&lt;br&gt;&amp;nbsp;26 error_t&lt;br&gt;&amp;nbsp;27 __argz_create_sep (const char *string, int delim, char **argz, size_t *len)&lt;br&gt;&lt;br&gt;这个参数有一个char **argz, 很难理解是什么意思.&lt;br&gt;&lt;br&gt;后面想通了这种做法意义.&lt;br&gt;&lt;br&gt;1. 指针:&amp;nbsp; 期待函数可以对指向的内存进行修改, 从而得到返回值. (除指针使用const修饰)&lt;br&gt;2. 指针的指针: 期待函数返回指向一块内存的地址.&lt;br&gt;&lt;br&gt;举个例子&lt;br&gt;指针的情况:&lt;br&gt;extern int change( char *buffer);&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;char *buffer = (char *)malloc(100);&lt;/span&gt;&lt;/b&gt;&lt;br&gt;change(buffer);&lt;br&gt;&lt;b&gt;* change函数会修改buffer内存&lt;/b&gt;&lt;br&gt;&lt;br&gt;指针的指针的情况:&lt;br&gt;extern int change( char **buffer);&lt;br&gt;&lt;br /&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;char *buffer = NULL;&lt;/b&gt;&lt;br&gt;&lt;br /&gt;change( &lt;b&gt;&amp;amp;buffer&lt;/b&gt; );&lt;br&gt;&lt;b&gt;* change函数会返回一块已经被修改的内存.&lt;/b&gt;&lt;br&gt;&lt;br&gt;再看一组函数:&lt;br&gt;1.&amp;nbsp; char *ttyname(int fd);&lt;br&gt;2.&amp;nbsp; int ttyname_r(int fd, char *buf, size_t buflen);&lt;br&gt;&lt;br&gt;参数是char *buf。 可以猜测。 ttyname_r会对一块&lt;b&gt;已经申请的内存&lt;/b&gt;进行修改。因为内存在函数体里无法知道长度， 所以就有size_t buflen参数。因此使用时是这样的：&lt;br&gt;&lt;br&gt;size_t buflen = 100;&lt;br&gt;char *buffer = (char *) malloc( buflen ); &lt;b style="color: rgb(255, 0, 0);"&gt;#这是一定事先申请的&lt;/b&gt;&lt;br&gt;if ( ttyname_r ( 1, buffer, buflen ) ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...do_you_want....&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;如果&lt;/b&gt; glibc是提供了一个这样的函数: int ttyname_r(int fd, &lt;b style="color: rgb(255, 0, 0);"&gt;char **buf&lt;/b&gt;);&lt;br&gt;&lt;br&gt;那么使用时就可以:&lt;br&gt;char&amp;nbsp; *buffer=NULL;&lt;br&gt;if ( ttyname_r ( 1,&amp;nbsp; &lt;b style="color: rgb(255, 0, 0);"&gt;&amp;amp;buffer&lt;/b&gt; ) ){&lt;br&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ...do_you_want....&lt;br&gt;&lt;br /&gt;}&lt;br&gt;&lt;br&gt;这样感觉传少了参数, 还少打代码.&lt;br&gt;&lt;br&gt;但是用法没有绝对的! 这样总结只是为了看代码是容易有方法&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7360315346192464846?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7360315346192464846/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/c_20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7360315346192464846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7360315346192464846'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/c_20.html' title='**作为C函数参数'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7165888977406596058</id><published>2010-01-17T01:21:00.001-08:00</published><updated>2010-01-17T01:21:49.419-08:00</updated><title type='text'>string.h里的函数的maxlen限制</title><content type='html'>maxlen是指最大长度。 第一次注意到maxlen这个参数是在：&lt;br&gt;size_t __strnlen (const char *str, size_t maxlen)&lt;br&gt;&lt;br&gt;C里， 对内存的操作常常是一个循环， 针对于字符串的话， 循环的退出条件常常是: 一个特定的字符&lt;br&gt;&lt;br&gt;1. 如'\0'&lt;br&gt;2. strchr的第二个参数&lt;br&gt;&lt;br&gt;这样, 在历遍这块内存时, 需要程序员明白一点: 自己是否确认1和2的字符串在你操作的内存中?&lt;br&gt;&lt;br&gt;否则, 这将是很危险的. 举个例子:&lt;br&gt;&lt;br&gt;void main(int argc, char *argv){&lt;br&gt;&amp;nbsp; char a[10], b[10];&lt;br&gt;&amp;nbsp; memset(a, 'b', 10);&lt;br&gt;&amp;nbsp; a[5] = '\0';&lt;br&gt;&amp;nbsp; //这里证明a的址址比b的高&lt;br&gt;&amp;nbsp; printf("a - b = %d\n", (int)(a - b));&lt;br&gt;&amp;nbsp; //b长度就会有问题&lt;br&gt;&amp;nbsp; printf("strlen(a): %d, strlen(b): %d\n", strlen(a), strlen(b));&lt;br&gt;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;//应该使用strnlen函数!, strlen和strnlen的区别就在于maxlen&lt;/b&gt;&lt;br&gt;&amp;nbsp; printf("strnlen(a): %d, strnlen(b): %d\n", strnlen(a, sizeof(a)), strnlen(b, sizeof(b)));&lt;br&gt;}&lt;br&gt;输出:&lt;br&gt;a - b = 10&lt;br&gt;strlen(a): 5, &lt;b style="color: rgb(255, 0, 0);"&gt;strlen(b): 15&lt;/b&gt;&lt;br&gt;strnlen(a): 5, &lt;b style="color: rgb(255, 0, 0);"&gt;strnlen(b): 10&lt;/b&gt;&lt;br&gt;&lt;br&gt;如果在使用strlen的同时, 使用memset函数, 将会是灾难性的&lt;br&gt;&lt;br&gt;按照这一种考虑, 把glibc/string下的函数分成如下&lt;br&gt;&lt;br&gt;&lt;div&gt;&lt;table class="" id="q7jm" cellpadding="3" cellspacing="0" height="927" width="564" border="1" bordercolor="#000000"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;no maxlen&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;optimize&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;maxlen&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;optimize&lt;/td&gt;&lt;td&gt;information&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;copy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcpy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strncpy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;strncpy(s1, s2, maxlen)&lt;br&gt;如果maxlen &amp;gt; strlen(s2), 那么&lt;br&gt;剩下的都用'\0'填充. 使用strcpy最后一个也为'\0'&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memset&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memcpy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memccpy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td&gt;memccpy(dest, src, '\0', maxlen)与strncp差不多,但是最后只有一个'\0'&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;mempcpy&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;与memcpy相似&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;duplicate&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strdup&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strndup&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;两者的区别是&lt;br&gt;调用strlen或者&lt;br&gt;调用strnlen&lt;br&gt;最后都调用&lt;br&gt;memcpy&lt;br&gt;最后byte为'\0'&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;find&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strchr&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memchr&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strrchr&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memrchr&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;strrchr调用strchr&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strchrnull&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strstr&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memmem&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;using a linear algorithm with a smaller coefficient.&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcasestr&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;length&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strlen&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strnlen&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;compare&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcmp&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strncmp&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memcmp&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcasecmp&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strncase&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;concatenate&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcat&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;No&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strncat&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;Yes&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;move&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;memmove&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;set&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strspn&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strcspn&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;other&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strfry&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;strxfrm&lt;/td&gt;&lt;td width="16.666666666666668%"&gt;&lt;br&gt;&lt;/td&gt;&lt;td&gt;&lt;br&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br&gt;* optimize的意思是被多个字节一起操作, 或者可以被compiler优化&lt;br&gt;&lt;br&gt;PS:: 为了安全, 还是有mexlen参数的函数靠谱, 再者, 有maxlen的函数会快&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7165888977406596058?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7165888977406596058/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/stringhmaxlen.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7165888977406596058'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7165888977406596058'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/stringhmaxlen.html' title='string.h里的函数的maxlen限制'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-6468281555853412328</id><published>2010-01-15T22:30:00.001-08:00</published><updated>2010-01-15T22:30:25.986-08:00</updated><title type='text'>NULL, 0x00, '\0'怎么看都是一个东西</title><content type='html'>void main(int argc, char *argv){&lt;br&gt;&amp;nbsp; char a = '\0';&lt;br&gt;&amp;nbsp; char b = (char ) 0x00;&lt;br&gt;&amp;nbsp; char c = (char )NULL;&lt;br&gt;&amp;nbsp; if ( a == b) printf("OK\n");&lt;br&gt;&amp;nbsp; if ( a == c) printf("OK\n");&lt;br&gt;}&lt;br&gt;&lt;br&gt;输出結果为：&lt;br&gt;OK&lt;br&gt;OK&lt;br&gt;&lt;br&gt;只是NULL对compiler来说， 会测试变量的类型， 如：&lt;br&gt;char c = NULL;&lt;br&gt;会报： warning: initialization makes integer from pointer without a cast&lt;br&gt;&lt;br&gt;如果不信息(char )NULL和 NULL是相同的数值的话， 可以使用：&lt;br&gt;grep -r "define NULL"&lt;br&gt;可以看到：&lt;br&gt;define NULL (0)&lt;br&gt;define NULL 0&lt;br&gt;define NULL ((void*)0)&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-6468281555853412328?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/6468281555853412328/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/null-0x00.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6468281555853412328'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6468281555853412328'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/null-0x00.html' title='NULL, 0x00, &amp;#39;\0&amp;#39;怎么看都是一个东西'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-6873887521214686675</id><published>2010-01-15T20:06:00.001-08:00</published><updated>2010-01-15T20:23:55.770-08:00</updated><title type='text'>数组的长度</title><content type='html'>用高级语言用惯了， 想到得长度时， 一般有函数可以得到。对于C的数组， 我也是这样想的。至少还有一个sizeof&lt;br&gt;&lt;br&gt;晚上和网友聊C的时候， 他贴了不少自己的笔记， 其中有这样一段：&lt;br&gt;&amp;nbsp;* 在函数参数中，array和*是一回事&lt;br&gt;&lt;br&gt;从文字中, 我很明白它说的是什么意思. 但是很深的一层, 我还不了解数组, 连sizeof都不了解.&lt;br&gt;&lt;br&gt;后面. 我在分析glibc/string/strlen.c的代码时, 这个问题让我重新深刻了解&lt;br&gt;&lt;br&gt;在使用malloc分配空间时, 程序员是应该确切了解空间长度的. 否则后果严重.&lt;br&gt;&lt;br&gt;那么, 数组的长度呢? 如:&lt;br&gt;void main(int argc, char *argv[])&lt;br&gt;{&lt;br&gt;&amp;nbsp; char s[10];&lt;br&gt;&amp;nbsp; printf("%d\n", sizeof(s));&lt;br&gt;}&lt;br&gt;输出为10&lt;br&gt;&lt;br&gt;这个sizeof就让本人感觉到: 数组的长度是随时都可以得到的. 真是这样吗?&lt;br&gt;&lt;br&gt;strlen.c的代码就让我提出了这个疑問: &lt;br&gt;1. 在strlen.c的函数出, 根本就没有sizeof的出现. 它就一个死循环, 去测试第一个'\0'. &lt;br&gt;2. &lt;b style="color: rgb(0, 0, 255);"&gt;如果在某种情况下&lt;/b&gt;, 不知道参数的长度, 只有一种結果: 非法引用. 关于Segmentation, 可见: http://en.wikipedia.org/wiki/Segmentation_fault&lt;br&gt;* 某种情况是指&lt;b style="color: rgb(0, 0, 255);"&gt;刚刚好&lt;/b&gt;一直找不到'\0'&lt;br&gt;&lt;br&gt;在使用strlen.c得到Segmentation fault, 是相当crazy的事!&lt;br&gt;&lt;br&gt;数组参数也一样有这个问题, 这不是strlen.c里不使用sizeof的问题. 是因为sizeof也无法知道! 来个例子:&lt;br&gt;&lt;br&gt;void print_len(char *p){&lt;br&gt;&amp;nbsp; printf("%d\n", sizeof(s));&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;void main(int argc, char *argv[])&lt;br&gt;{&lt;br&gt;&amp;nbsp; char s[10];&lt;br&gt;&amp;nbsp; print_len(s);&lt;br&gt;}&lt;br&gt;&lt;br&gt;gcc直接就报错. 因为sizeof不能这样用. 可以大概猜出, sizeof的結果是编译器在编译时得到的值. 不是run time得到的.&lt;br&gt;&lt;br&gt;可以猜出, 数组与malloc得到的连续空间的比较:&lt;br&gt;1. char a[10] 等于 char * const a = malloc(10);&lt;br&gt;2. 数组多一个在&lt;b&gt;编译时&lt;/b&gt;得到长度的可行性&lt;br&gt;&lt;b&gt;* char * const 和const char * 可是不同的哦&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;PS: &lt;br&gt;怪不得go lang的数组参数在调用时, 被要求测试数组的长度. 原来不是为了安全. &lt;br&gt;看来go lang像C一样强大, 又要比C安全, 是有道理的.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-6873887521214686675?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/6873887521214686675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post_15.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6873887521214686675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/6873887521214686675'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post_15.html' title='数组的长度'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5970995046780109899</id><published>2010-01-15T11:45:00.001-08:00</published><updated>2010-01-15T11:45:25.590-08:00</updated><title type='text'>数另一种计算方法</title><content type='html'>&lt;p&gt;朋友说, 这种技术可以从这书中得到: www.&lt;b&gt;hackersdelight&lt;/b&gt;.org&lt;/p&gt;&lt;p&gt;只是没有必要去看. 了解这种用法, 只是为了看懂glibc罢了. 没有它意.&lt;br&gt;&lt;/p&gt;&lt;h3&gt;得到负数的方法&lt;/h3&gt;&lt;br&gt;C语言里的“位与”， “位或“， ”取反“， 在数的计算中， 相当活用。&lt;br&gt;&lt;br&gt;void main(int argc, char *argv[])&lt;br&gt;{&lt;br&gt;&amp;nbsp; printf("%x\n", 2);&lt;br&gt;&amp;nbsp; printf("%x\n", -2);&lt;br&gt;&amp;nbsp; printf("%x\n", ~2);&lt;br&gt;&amp;nbsp; printf("%x\n", ~2 + 1);&lt;br&gt;}&lt;br&gt;输出結果：&lt;br&gt;2&lt;br&gt;fffffffe&lt;br&gt;fffffffd&lt;br&gt;fffffffe&lt;br&gt;&lt;br&gt;可以得到 -2 == (~2 + 1)&lt;br&gt;&lt;br&gt;实际上就是&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;补码&lt;/span&gt;&lt;/b&gt;: http://baike.baidu.com/view/377340.htm&lt;br&gt;&lt;br&gt;&lt;h3&gt;divmod的算术&lt;/h3&gt;在glibc/string/strncmp.c中, 可以看到divmod的方法:&lt;br&gt;&lt;br&gt;size_t n4 = n &amp;gt;&amp;gt; 2; n4就是商&lt;br&gt;&lt;br&gt;n &amp;amp;= 3; 就是除以4后的余数. 因为最后两位情况是0到3, 不可能被4除. &lt;br&gt;&lt;br&gt;"&amp;gt;&amp;gt;"和"&amp;lt;&amp;lt;"只合适乘以2^n和除以2^n&lt;br&gt;&lt;br&gt;用"&amp;amp;"求余又要方便, 只合适求除以2^n后的余数.&lt;br&gt;&lt;br&gt;&lt;h3&gt;余数的求法&lt;/h3&gt;和前面的divmod有关系, 都是余数的问题, 只是不够深刻, 来一个深刻一些的例子:&lt;br&gt;&lt;br&gt;代码来自于glibc/string/strnlen.c&lt;br&gt;&lt;br&gt;&amp;nbsp;/* Handle the first few characters by reading one character at a time.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Do this until CHAR_PTR is aligned on a longword boundary.&amp;nbsp; */&lt;br&gt;&amp;nbsp; for (char_ptr = str;&lt;b style="color: rgb(0, 0, 255);"&gt; ((unsigned long int) char_ptr&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;amp; (sizeof (longword) - 1)) != 0&lt;/b&gt;;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ++char_ptr)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (*char_ptr == '\0')&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp; if (char_ptr &amp;gt; end_ptr)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char_ptr = end_ptr;&lt;br&gt;&amp;nbsp; return char_ptr - str;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;longword其实就是long int , 等于本人的电脑等于4&lt;br&gt;上面蓝色的代码就是求除以 longword 后， 余数是否为0&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5970995046780109899?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5970995046780109899/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5970995046780109899'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5970995046780109899'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/blog-post.html' title='数另一种计算方法'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3589968432016891717</id><published>2010-01-07T22:56:00.001-08:00</published><updated>2010-01-07T22:56:07.621-08:00</updated><title type='text'>import只是一次</title><content type='html'>下面是测试过程：&lt;br&gt;&lt;br&gt;In [7]: import sys&lt;br&gt;&lt;br&gt;In [8]: os&lt;br&gt;---------------------------------------------------------------------------&lt;br&gt;NameError&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Traceback (most recent call last)&lt;br&gt;&lt;br&gt;/home/jessinio/data/workspace/project/&amp;lt;ipython console&amp;gt; in &amp;lt;module&amp;gt;()&lt;br&gt;&lt;br&gt;NameError: name 'os' is not defined&lt;br&gt;&lt;br&gt;In [9]: sys.getrefcount( sys.modules['os'] )&lt;br&gt;Out[9]: 58&lt;br&gt;&lt;br&gt;In [10]: import os&lt;br&gt;&lt;br&gt;In [11]: sys.getrefcount( sys.modules['os'] )&lt;br&gt;Out[11]: 59&lt;br&gt;&lt;br&gt;In [12]: id( sys.modules['os'] )&lt;br&gt;Out[12]: 3078271308L&lt;br&gt;&lt;br&gt;In [13]: id( os )&lt;br&gt;Out[13]: 3078271308L&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3589968432016891717?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3589968432016891717/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/import.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3589968432016891717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3589968432016891717'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/import.html' title='import只是一次'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-5946028328486730129</id><published>2010-01-07T20:40:00.001-08:00</published><updated>2010-01-07T20:40:20.118-08:00</updated><title type='text'>golang中的迭代</title><content type='html'>python中的这种功能：&lt;br&gt;&lt;br&gt;for key, value in a.items(): print key, value&lt;br&gt;&lt;br&gt;go language也有这种功能：&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var infomation string = "中国比美国好多了.";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println( infomation );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b&gt; //是unicode吗? 答案:否&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println( len( infomation ) );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%c\n", infomation[0]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(255, 0, 0);"&gt;for&lt;/span&gt; index, value := &lt;span style="color: rgb(255, 0, 0);"&gt;range&lt;/span&gt; infomation {&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;//%c与C中的%c不同 &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; the character represented by the corresponding Unicode code point&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%d:&lt;b style="color: rgb(0, 0, 255);"&gt;%c &lt;/b&gt;", index, value);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br&gt;}&lt;br&gt;输出結果：&lt;br&gt;中国比美国好多了.&lt;br&gt;25&lt;br&gt;ä&lt;br&gt;0:中 3:国 6:比 9:美 12:国 15:好 18:多 21:了 24:.&lt;br&gt;&lt;br&gt;range一个string时， 为unicode code point， 而不是byte&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-5946028328486730129?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/5946028328486730129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_6780.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5946028328486730129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/5946028328486730129'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_6780.html' title='golang中的迭代'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4482060423863497281</id><published>2010-01-07T08:01:00.001-08:00</published><updated>2010-01-07T08:11:28.605-08:00</updated><title type='text'>golang中的字符串</title><content type='html'>golang的String type与python的basestring实例差不多.&lt;br&gt;&lt;h3&gt;immutable&lt;/h3&gt;python里str的情况:&lt;br&gt;In [3]: name = str("abcde")&lt;br&gt;In [4]: name[1]&lt;br&gt;Out[4]: 'b'&lt;br&gt;In [5]: name[1] = "3"&lt;br&gt;TypeError: 'str' object does not support item assignment&lt;br&gt;&lt;br&gt;python里unicode的情况:&lt;br&gt;In [6]: name = unicode("abcde")&lt;br&gt;In [7]: name[2]&lt;br&gt;Out[7]: u'c'&lt;br&gt;In [8]: name[2] = u'f'&lt;br&gt;TypeError: 'unicode' object does not support item assignment&lt;br&gt;&lt;br&gt;golang中的string类型也是immutable的:&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var name string = "abcd";&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%c\n", name[2]);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这种修改将会产出错&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; name[1] = 'c';&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //只能得到string变量的开始地址.&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%p\n", &amp;amp;name);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //下面会报错， 因为不能求元素的地址!&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Prinft("%p\n", &amp;amp;name[2]);&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;h3&gt;string literals&lt;/h3&gt;在字符串上, golang使用三种符号:&lt;br&gt;1. 单引号: 与C一样, 表示是byte,&lt;br&gt;2. 双引号: 与C一样, 表示N种byte,&amp;nbsp; 只是golang中不可以修改和求元素的地址.&lt;br&gt;3. 反引号: 不解释字符串的转义符.&lt;br&gt;&lt;br&gt;python中也有这三种用法, 只是使用的表达方式:&lt;br&gt;1. 单(双)引号: 表示N种chr实例的集合&lt;br&gt;2. u开头的unicode string literals， 还没有发现golang有unicode string literals&lt;br&gt;3. r开头的string literals: &lt;br&gt;&lt;br&gt;In [10]: print &amp;nbsp; r'a\nb'&lt;br&gt;a\nb&lt;br&gt;&lt;br&gt;&lt;h3&gt;unicode问题&lt;/h3&gt;双引号得到的是不可修改的byte集. 不是unicode类型!&lt;br&gt;&lt;br&gt;下面做一个测试, 先得到一个汉字的外码和unicode码:&lt;br&gt;In [14]: u'中'&lt;br&gt;Out[14]: u'&lt;b style="color: rgb(0, 0, 255);"&gt;\xe4\xb8\xad&lt;/b&gt;'&lt;br&gt;In [15]: unicode('中', "utf-8")&lt;br&gt;Out[15]: u'&lt;b style="color: rgb(255, 0, 0);"&gt;\u4e2d&lt;/b&gt;'&lt;br&gt;&lt;br&gt;再看golang的代码:&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var infomation string = &lt;b style="color: rgb(255, 0, 0);"&gt;"\u4e2d"&lt;/b&gt;;&lt;b&gt; //使用unicode的标志法, 也无法改变string就是byte集的现实!&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println( infomation );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;//是unicode吗? 答案:否&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println( len( infomation ) );&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%x", infomation);&lt;br&gt;}&lt;br&gt;&lt;br&gt;输出的結果是:&lt;br&gt;中&lt;br&gt;3&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;e4b8ad&lt;/b&gt;&lt;br&gt;&lt;br&gt;golang中怎么样python一样， 有unicode string literals呢？ 答案： 没有！&lt;br&gt;&lt;br&gt;只有使用函数得到。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4482060423863497281?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4482060423863497281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_07.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4482060423863497281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4482060423863497281'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_07.html' title='golang中的字符串'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-3163764997954468427</id><published>2010-01-07T06:57:00.001-08:00</published><updated>2010-01-07T06:57:14.586-08:00</updated><title type='text'>golang中的slice</title><content type='html'>slice 数据类型大概原理是这样的:&lt;br&gt;&lt;br&gt;type Slice struct { &lt;br&gt;&amp;nbsp; base *elem_type; &lt;br&gt;&amp;nbsp; len int; &lt;br&gt;&amp;nbsp; cap int; &lt;br&gt;}&lt;br&gt;&lt;br&gt;最容易和数组乱的就是下面的这样声明：&lt;br&gt;&amp;nbsp; var a []int;&lt;br&gt;&lt;br&gt;空长度表示变量是一个slice type， 不是空数组。&lt;br&gt;&lt;br&gt;下面的使用方式：&lt;br&gt;var slice = &lt;b style="color: rgb(0, 0, 255);"&gt;[]&lt;/b&gt;int{ 1,2,3,4,5 }; //这是产生一个数组, 然后产生一个slice&lt;br&gt;* 在这种背后创建了数组的情况, golang提供了reslice和cap函数功能&lt;br&gt;&lt;br&gt;与下面的是不同的:&lt;br&gt;var ar = &lt;b style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;[&lt;/span&gt;...&lt;/b&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;]&lt;/b&gt;int{ 1,2,3,4,5 };&lt;br&gt;&lt;br&gt;golang中的slice与python中的list的slice是不同的. &lt;br&gt;1. [:8] 没有隐含的开始方式, 也没有隐含的结束方式&lt;br&gt;2. [1:999999999] 超出不等于到最后, 报错!&lt;br&gt;3. 没有负数的end, 报错.&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //创建一个slice, 它是引用[8]int的&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ar := []int {0, 1, 2, 3, 4, 5, 6, 7};&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //slice类型支持reslice, 調整它的引用情况&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ar = ar[2:4];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("length: %d\n", len(ar));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(ar[0]);&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //怎么重新引用[8]int的完整长度呢? &lt;b style="color: rgb(0, 0, 255);"&gt;答案是否定的&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //提供了cap()函数&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ar = ar[0:cap(ar)];&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("length: %d\n", len(ar));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(ar[0]);&lt;br&gt;}&lt;br&gt;&lt;br&gt;输出結果是:&lt;br&gt;length: 2&lt;br&gt;2&lt;br&gt;length: 6&lt;br&gt;2&lt;br&gt;&lt;br&gt;reslice无法修改slice的起始地址. 只能修改结束地址. capacity的长度会保存不变(除非引用了其它数组)&lt;br&gt;&lt;br&gt;一步产生数组和slice变量:&lt;br&gt;&lt;br&gt;var a = &amp;amp;[100]int{};&lt;br&gt;&lt;br&gt;但是这样是不行的:&lt;br&gt;&lt;br&gt;var a = &amp;amp;[100]int;&lt;br&gt;&lt;br&gt;还可以使用make()函数:&lt;br&gt;a := make([]int, 100);&lt;br&gt;&lt;br&gt;make([]int) 是等于[]int , 为一个slice对象&lt;br&gt;&lt;br&gt;new([]int) 返回 *[]int , 为指向slice的指针变量.&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-3163764997954468427?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/3163764997954468427/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/golangslice.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3163764997954468427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/3163764997954468427'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/golangslice.html' title='golang中的slice'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-9031980010497576049</id><published>2010-01-06T22:59:00.001-08:00</published><updated>2010-01-06T22:59:25.417-08:00</updated><title type='text'>golang中的指针数组</title><content type='html'>在golang的文档里没有看到怎么声明指针数组的例子（不知道是不是自己看漏了）&lt;br&gt;&lt;br&gt;文档里本人只看到“指向数组的指针”的声明。如：&lt;br&gt;&amp;nbsp; var p2array *[3]int;&lt;br&gt;&lt;br&gt;不知道什么时候突然一个想法就出来了：&lt;br&gt;&amp;nbsp; var pointers [3]*int; &lt;br&gt;这就是指针数组的声明。和文档里说的指向数组的指针的声明是不同的。&lt;br&gt;&lt;br&gt;试了一下， 还真的可以的， 牛B！！&lt;br&gt;&lt;br&gt;import "fmt"&lt;br&gt;func main() {&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var ar [3]*int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //这是真的吗?&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(len(ar));&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; value := new(int);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *value = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //存放指针&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ar[0] = value;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*(ar[0]));&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-9031980010497576049?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/9031980010497576049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_06.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9031980010497576049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/9031980010497576049'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang_06.html' title='golang中的指针数组'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-7999097881992811194</id><published>2010-01-05T06:59:00.001-08:00</published><updated>2010-01-05T06:59:27.380-08:00</updated><title type='text'>amule下载完的文件名乱码问题</title><content type='html'>最近使用amule的次数比较好, 发现amule像一个金矿, 里面太奶奶的多好货了.&lt;br&gt;&lt;br&gt;当然, 也不是白取的, 从我notebook上upload的数据都有33G多了. 下载点也是正常的.&lt;br&gt;&lt;br&gt;不过, 奶奶的, 今天在Incoming里找文件, 无法忍受amule下载的文件名是乱码一事~ 决定清理!&lt;br&gt;&lt;br&gt;In [76]: f = os.listdir('.')&lt;br&gt;&lt;br&gt;In [77]: for i in range(len(f)):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if f[i].startswith("LINUX"):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print i&lt;br&gt;Out[77]: 8&lt;br&gt;找出自己要试验的一条文件名&lt;br&gt;&lt;br&gt;乱码, 一般都是gbk编码吧, 于是:&lt;br&gt;In [81]: print f[8].decode("gbk")&lt;br&gt;-------&amp;gt; print(f[8].decode("gbk"))&lt;br&gt;LINUX莽鲁禄莽禄聼莽庐隆莽聬聠忙聤聙忙聹炉忙聣聥氓聠聦茂录聢莽卢卢2莽聣聢茂录聣.pdf&lt;br&gt;&lt;br&gt;&lt;br&gt;顶~~~~~~ 屁都不是. 又试了几种编码都不行~~~~ 试多了几次, 发现一个现象:&lt;br&gt;&lt;br&gt;In [87]: f[8].decode("utf-8")&lt;br&gt;Out[87]: u'LINUX&lt;b style="color: rgb(0, 0, 255);"&gt;\xe7\xb3\xbb&lt;/b&gt;\xe7\xbb\x9f\xe7\xae\xa1\xe7\x90\x86\xe6\x8a\x80\xe6\x9c\xaf\xe6\x89\x8b\xe5\x86\x8c\xef\xbc\x88\xe7\xac\xac2\xe7\x89\x88\xef\xbc\x89.pdf'&lt;br&gt;&lt;br&gt;In [88]: print "&lt;b style="color: rgb(0, 0, 255);"&gt;\xe7\xb3\xbb&lt;/b&gt;"&lt;br&gt;-------&amp;gt; print("&lt;b style="color: rgb(0, 0, 255);"&gt;\xe7\xb3\xbb&lt;/b&gt;")&lt;br&gt;系&lt;br&gt;&lt;br&gt;* 从上面取出的一段外码, 是可以正确显示的. 看来amule是把unicode的文件名直接给str()成raw string串了. 乱码就是这样产生的：&lt;br&gt;&lt;br&gt;In [108]: c = u'梁'&lt;br&gt;&lt;br&gt;In [109]: c&lt;br&gt;Out[109]: u'\xe6\xa2\x81'&lt;br&gt;&lt;br&gt;In [110]: str(c)&lt;br&gt;Out[110]: '\xc3\xa6\xc2\xa2\xc2\x81'&lt;br&gt;&lt;br&gt;In [111]: print str(c)&lt;br&gt;--------&amp;gt; print(str(c))&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;æ¢&lt;/span&gt;&lt;br style="color: rgb(255, 0, 0);"&gt;&lt;/b&gt;&lt;br&gt;现在的问题是怎么把上面一串为unicode的外码整成raw string呢?&lt;br&gt;&lt;br&gt;现在的目标是把u'\xe7'转成'\xe7'， 如下方法：&lt;br&gt;In [153]: chr(ord(u'\xe7'))&lt;br&gt;Out[153]: '\xe7'&lt;br&gt;&lt;br&gt;&lt;br&gt;OK， 妈的。 一个for处理完你～～～ 狗日的乱码&lt;br&gt;&lt;br&gt;#!/usr/bin/env python&lt;br&gt;# coding: utf-8&lt;br&gt;import os&lt;br&gt;&lt;br&gt;DIR="/home/jessinio/.aMule/Incoming"&lt;br&gt;&lt;br&gt;for f in os.listdir( DIR ):&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print f&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval = []&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for i in f.decode("utf-8"):&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; # 文件名本身没有乱码的情况时， 会是unicode, 这时ord的值为unicode的内码， 超过256&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if ord(i) &amp;gt; 256:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval.append(i.encode("utf-8"))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; retval.append(chr(ord(i)))&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print ''.join(retval)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.rename( os.path.join(DIR, f), os.path.join( DIR, ''.join(retval) ) )&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-7999097881992811194?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/7999097881992811194/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/amule.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7999097881992811194'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/7999097881992811194'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/amule.html' title='amule下载完的文件名乱码问题'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2089135637698022994</id><published>2010-01-05T01:18:00.001-08:00</published><updated>2010-01-07T08:26:13.294-08:00</updated><title type='text'>golang中的指针</title><content type='html'>总结一下golang中的指针与C语言的指针的用法.&lt;br&gt;&lt;br&gt;总体一致: &lt;br&gt;C的代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int *number;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; number = (int *) malloc(sizeof(int));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *number = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", *number);&lt;br&gt;&lt;br&gt;golang的代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var pointer *int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; pointer = new(int);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *pointer = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*pointer);&lt;br&gt;&lt;br&gt;多重指针情况:&lt;br&gt;C的代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int **outer;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int *inter;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inter = (int *) malloc(sizeof(int));&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *inter = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outer = &amp;amp;inter;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //地址一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", *outer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //值一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", *inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", **outer);&lt;br&gt;&lt;br&gt;golang的代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var outer **int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var inter *int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inter = new(int);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *inter = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; outer = &amp;amp;inter;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //地址一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*outer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //值一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(**outer);&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;C语言的下面这种方式在golang里实现&lt;/b&gt;:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int **outer;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int *inter;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inter = (int *) malloc(sizeof(int));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;outer = (int **) malloc(sizeof(int));&lt;/b&gt;&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *inter = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;*outer = inter;&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //地址一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", *outer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //值一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", *inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", **outer);&lt;br&gt;&lt;br&gt;在golang中:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var inter *int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var outer **int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; inter = new(int);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *inter = 3;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;outer = new(*int);&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;*outer = inter;&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //地址一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*outer);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //值一样&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(*inter);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(**outer);&lt;br&gt;&lt;br&gt;上面都是在玩指针, 下面看看基本的数据结构&lt;br&gt;&lt;br&gt;基本的数据结构有: 数组与结构体 (map和树之类的不在討論范围)&lt;br&gt;&lt;br&gt;&lt;h3&gt;golang中的数组与C中的数组有很大的差别&lt;/h3&gt;golang中的数组是这样说的: Arrays are values, not implicit pointers as in C.&lt;br&gt;&lt;br&gt;0. 数组做参数时, 需要被检查长度.&lt;br&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;1. 变量名不等于数组开始指针!&lt;/b&gt;&lt;br&gt;2. 不支持C中的*(ar + sizeof(int))方式的指针移动. 需要使用到&lt;b&gt;unsafe包&lt;/b&gt;&lt;br&gt;3. 如果p2array为指向数组的指针， *p2array不等于p2array[0]&lt;br&gt;&lt;h4&gt;例子0 数组做参数时, 需要被检查长度.&lt;/h4&gt;func use_array( args [4]int ){&lt;br&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; args[1] = 100;&lt;br&gt;}&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var args = [5]int{1, 2, 3, 4, 5};&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_array(args);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(args);&lt;br&gt;}&lt;br&gt;&lt;br&gt;编译出错: cannot use args (type [5]int) as type [4]int in function argument, 需要有长度上的检查&lt;br&gt;&lt;h4&gt;例子1 &lt;b style="color: rgb(255, 0, 0);"&gt;变量名不等于数组开始指针!&lt;/b&gt;&lt;/h4&gt;func use_array( args [4]int ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;args[1] = 100;&lt;/b&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var args = [5]int{1, 2, 3, 4, 5};&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_array(args);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;fmt.Println(args);&lt;/b&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;输出結果是 [1 2 3 4], 没有保存結果, &lt;b&gt;数组名&lt;/b&gt;的用法与C的不一样. 在golang里是这样的:&lt;br&gt;&lt;br&gt;&lt;b&gt;// 又长度检查, 也为地址传参&lt;/b&gt;&lt;br&gt;func use_array( &lt;b style="color: rgb(0, 0, 255);"&gt;args *[4]int&lt;/b&gt; ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; args[1] = 100;&amp;nbsp; &lt;b&gt;//但是使用还是和C一致&lt;/b&gt;, 不需要别加"*"操作符&lt;br&gt;}&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;func main() {&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var args = [4]int{1, 2, 3, 4};&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(255, 0, 0);"&gt;use_array(&amp;amp;args);&lt;/b&gt; &lt;b style="color: rgb(0, 0, 255);"&gt;//数组名已经不是表示地址了, 需要使用"&amp;amp;"得到地址&lt;/b&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Println(args);&lt;br&gt;}&lt;br&gt;&lt;br&gt;例子2 &lt;b&gt;如果p2array为指向数组的指针， *p2array不等于p2array[0]&lt;/b&gt;&lt;br&gt;对比一下C和golang在这方面的差别：&lt;br&gt;void main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int *p2array;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p2array = (int *) malloc(sizeof(int) * 3);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //等于p2array[0]&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; *p2array = 0;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", *p2array + 1);&lt;br&gt;}&lt;br&gt;* 输出为1&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var p2array *[3]int ;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p2array = new([3]int);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%x\n", *p2array + 1); &lt;b style="color: rgb(0, 0, 255);"&gt;//不管p2array是指针变量还是数组变量, 都只能使用"[]"方式使用&lt;/b&gt;&lt;br&gt;}&lt;br&gt;* 报错.&lt;br&gt;&lt;h3&gt;golang中的结构体也与C中的有差别&lt;/h3&gt;&lt;br /&gt;下面的方式是相当一致的:&lt;br&gt;C版本的:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; typedef struct&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } Point;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point p;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.y = 20;&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //开始地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", &amp;amp;p);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //某元素地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", &amp;amp;(p.x));&lt;br&gt;&lt;br&gt;golang版本的:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type Point struct{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var p Point;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.y = 20;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%p\n", &amp;amp;p);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%p\n", &amp;amp;(p.x));&lt;br&gt;&lt;br&gt;使用allocate的方式:&lt;br&gt;C代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; typedef struct&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; { &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } Point;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point *p;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (Point *) malloc(sizeof(Point));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;y = 20;&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //开始地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;printf("%p\n", p);&lt;/b&gt; //地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //某元素地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%p\n", &amp;amp;(p-&amp;gt;x));&lt;br&gt;&lt;br&gt;golang代码:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; type Point struct{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; x int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; y int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; };&lt;br&gt;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var p *Point;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = new(Point);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.y = 20;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;fmt.Printf("%p\n", p);&lt;/b&gt; //地址&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%p\n", &amp;amp;(p.x));&lt;br&gt;&lt;br&gt;也可以说是一样的, 只不过在使用结构中的元素时没有了"-&amp;gt;"操作符:&lt;br&gt;There is no -&amp;gt; notation for structure pointers. Go provides the indirection for you.&amp;nbsp;&amp;nbsp; &lt;br&gt;&lt;br&gt;结构体的地址传参与数组的方式一样, 当然, 和C的风格也是一模一样的. 如下例子:&lt;br&gt;&lt;br&gt;C代码:&lt;br&gt;#include &amp;lt;stdio.h&amp;gt;&lt;br&gt;#include &amp;lt;stdlib.h&amp;gt;&lt;br&gt;typedef struct&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int x;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int y;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; } Point;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;void use_struct(Point *arg){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; arg-&amp;gt;x = 100;&lt;br&gt;}&lt;br&gt;&lt;br&gt;void main(int argc, char *argv[]){&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Point *p;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = (Point *) malloc(sizeof(Point));&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p-&amp;gt;y = 20;&lt;br&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_struct(p);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%d\n", p-&amp;gt;x);&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;golang代码:&lt;br&gt;import "fmt"&lt;br&gt;&lt;br&gt;type Point struct{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; x int;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; y int;&lt;br&gt;};&lt;br&gt;&lt;br&gt;func use_sturct( p *Point ){&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.x = 100;&lt;br&gt;}&lt;br&gt;&lt;br&gt;func main() {&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; var p *Point;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p = new(Point);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.x = 10;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; p.y = 20;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; use_sturct(p);&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; fmt.Printf("%d\n", p.x);&lt;br&gt;}&lt;br&gt;&lt;br&gt;&lt;h3&gt;总的来说......&lt;/h3&gt;在传参方面, 大体上看与C的相同:&lt;br&gt;&lt;br /&gt;&amp;nbsp; f(ar);&amp;nbsp;&amp;nbsp;&amp;nbsp; // passes a copy of ar &lt;br&gt;&lt;br /&gt;&amp;nbsp; fp(&amp;amp;ar);&amp;nbsp; // passes a pointer to ar&lt;br&gt;* 只是变量名是不是表示首个地址 有区别&lt;br&gt;&lt;br&gt;&lt;br&gt;"&amp;amp;" 与C语言一样是得到变量的指针. 与C有点不同， 取golang中指针指针的内容的值是不需要使用"*"操作符的， 但是指针的指针(或者继续多层时)需要显式使用"*"符号.&lt;br&gt;在http://golang.org/doc/go_spec.html#Selectors 一节中有描述。&lt;br&gt;&lt;br&gt;* 三层以上的指针使用是比较少的. 两层还是常见, 如main函数的参数char * argv[]&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;/div&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2089135637698022994?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2089135637698022994/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2089135637698022994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2089135637698022994'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/golang.html' title='golang中的指针'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-8574193077950954096</id><published>2010-01-04T01:39:00.001-08:00</published><updated>2010-01-04T01:39:24.229-08:00</updated><title type='text'>man命令出现 ESC[ 控制符</title><content type='html'>安装gentoo时， 出现使用man查看手册时出现一堆 ESC[ 之类的字符。 &lt;br&gt;这些字符是consolse下的颜色控制。&lt;br&gt;&lt;br&gt;了解了一下。 原来man命令也是调用外部程序来显示的。三个选项：&lt;br&gt;-P, -B, -H&lt;br&gt;&lt;br&gt;然后对比一下ubuntu下的man和gentoo下的man， 发现不同的man手册这方面已经变化。&lt;br&gt;&lt;br&gt;下面是gentoo的(man version 1.6f)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -P&amp;nbsp; pager&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specify which pager to use.&amp;nbsp; This option&amp;nbsp; overrides&amp;nbsp; the&amp;nbsp; MANPAGER&amp;nbsp; environment&amp;nbsp; variable,&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; which in turn overrides the PAGER variable.&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;By default, man uses &lt;/span&gt;/usr/bin/less -is&lt;/b&gt;.&lt;br&gt;&lt;br&gt;下面是ubuntu9.10的(man 2.5.6)&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -P pager, --pager=pager&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Specify which output pager to use.&amp;nbsp; &lt;b style="color: rgb(0, 0, 255);"&gt;By default, man uses pager -s&lt;/b&gt;.&amp;nbsp; This option overrides the $MAN‐&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; PAGER environment variable, which in turn overrides the $PAGER environment&amp;nbsp; variable.&amp;nbsp;&amp;nbsp; It&amp;nbsp; is&amp;nbsp; not&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; used in conjunction with -f or -k.&lt;br&gt;&lt;br&gt;调用的程序已经不同.&lt;br&gt;&lt;br&gt;在不安装pager程序下, 可以使用less程序的-R参数&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -R or --RAW-CONTROL-CHARS&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Like&amp;nbsp; -r, but only ANSI "color" escape sequences are output in "raw" form.&amp;nbsp; Unlike -r, the&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; screen appearance is maintained correctly in most cases.&amp;nbsp; ANSI&amp;nbsp; "color"&amp;nbsp; escape&amp;nbsp; sequences&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; are sequences of the form:&lt;br&gt;&lt;br&gt;所以, 让gentoo下的man不出现一堆 ESC[ , 可以:&lt;br&gt;export PAGER='less -R'&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-8574193077950954096?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/8574193077950954096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2010/01/man-esc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8574193077950954096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/8574193077950954096'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2010/01/man-esc.html' title='man命令出现 ESC[ 控制符'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2471668790302745363</id><published>2009-12-29T06:43:00.001-08:00</published><updated>2009-12-29T07:18:45.296-08:00</updated><title type='text'>go语言的声明</title><content type='html'>看go主页上的介绍时， 有点给我还不解的做法： 就是变量声明时的语法。&lt;br&gt;&lt;br&gt;golang的声明语言如下：&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;keywork&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var_name&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(56, 118, 29);"&gt;type&lt;/span&gt;&lt;/b&gt; = &lt;b&gt;value&lt;/b&gt;&lt;br&gt;&lt;br&gt;1. keywork包括：var, const, type, func&lt;br&gt;2. var_name为变量名&lt;br&gt;3. type为变量的类型（与keywork中的type有区别）&lt;br&gt;&lt;br&gt;看过的语言一就是没有类型， 一就是把类型放在变量名前面：表示这个变量是什么类型。 &lt;br&gt;&lt;br&gt;感觉很自然。 但是golang就反这个习惯。 把类型的位置反过来了。 &lt;br&gt;&lt;br&gt;&lt;br&gt;在golang的手册上给出了两个原因：&lt;br&gt;&lt;h2&gt;原因一: Also functions read better and are consistent with other declarations.&lt;/h2&gt;&lt;br&gt;说是与函数形式一致&lt;br&gt;&lt;br&gt;golang中的函数的定义方式：&lt;br&gt;func sum(a, b int) int { return a + b }&lt;br&gt;&lt;br&gt;golang中的变量的定义方式：&lt;br&gt;var p, q *int&lt;br&gt;&lt;br&gt;大概的意思是：&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; keywork&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var_name&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;&lt;span style="color: rgb(56, 118, 29);"&gt;type&lt;br&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;函数的声明关键字&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="color: rgb(56, 118, 29);"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(255, 0, 0);"&gt;函数名&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: rgb(56, 118, 29);"&gt;返回值类型&lt;/span&gt;&lt;/span&gt;&lt;br&gt;&lt;/span&gt;&lt;/b&gt;&lt;br&gt;&lt;h2&gt;原因二: short declaration&lt;/h2&gt;&lt;br&gt;golang中的变量声明有两种缩写方式：&lt;br&gt;&lt;b&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var_name&lt;/span&gt;&lt;/b&gt; = &lt;b&gt;value&lt;/b&gt;&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;* 放在后面就方便缩写,&lt;/b&gt; &lt;b style="color: rgb(0, 0, 255);"&gt;成为没有类型的写法&lt;/b&gt;?&lt;br&gt;&lt;b&gt;* 不过看上去真的比较像javascript的声明&lt;/b&gt;&lt;br&gt;&lt;br&gt;这时没有了类型， 类型为根据value的类型决定&lt;br&gt;&lt;br&gt;还有一种缩写：&lt;br&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;var_name&lt;/b&gt; := &lt;b&gt;value&lt;/b&gt;&lt;br&gt;&lt;b&gt;* 这就像python的声明了&lt;/b&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;h3&gt;顺眼了~~~~&lt;/h3&gt;想了一下, 感觉还是不错的. 当我们想声明一个变量时:&lt;br&gt;1. 想到&lt;b style="color: rgb(0, 0, 255);"&gt;var&lt;/b&gt; ( 想到一个keywork, 因为它是语言的一部分 )&lt;br&gt;2. 想到变量的名称&lt;b&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;var_name&lt;/span&gt;&lt;/b&gt;&lt;br&gt;3. 想到变量的初始化. &lt;b style="color: rgb(255, 0, 255);"&gt;(1)&lt;/b&gt;这时的初始化golang是提供缩写方式的. 这就与平时的脚本一样.&lt;span style="color: rgb(255, 0, 255);"&gt; &lt;b&gt;(2)&lt;/b&gt;&lt;/span&gt;当不想这时初始化时, 再定下这个变量的类型(毕竟golang是强类型语言)&lt;br&gt;&lt;br&gt;也是很好的一种使用感觉.( 个人的感觉~~~~ )&lt;br&gt;&lt;br&gt;BTW:: 其实上, golang在你没有初始化的情况下它会帮你初始化. 称为'zero value', 这个值会根据变量的类型变化. 如下:&lt;br&gt;The zero value depends on the type: integer 0,&amp;nbsp; floating point 0.0, false, empty string, nil&amp;nbsp; pointer, zeroed struct, etc.&lt;br style="color: rgb(0, 0, 255);"&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2471668790302745363?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2471668790302745363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2009/12/go.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2471668790302745363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2471668790302745363'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2009/12/go.html' title='go语言的声明'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-551125880941965706</id><published>2009-12-28T10:11:00.001-08:00</published><updated>2009-12-28T10:11:46.030-08:00</updated><title type='text'>安装golang玩玩</title><content type='html'>make软件只有两种結果：&lt;br&gt;1. 通过&lt;br&gt;2. 不通过&lt;br&gt;&lt;br&gt;-_- ! 等于没有说～～。 其实我想说的是：&lt;br&gt;1. 通过： 表示程序的源代码没有问题的情况。 与用户的环境有没有配置好没有关系&lt;br&gt;2. 不通过： 表示程序的源代码本身就有问题。&lt;br&gt;&lt;br&gt;之前下载chromium下来make就有这样的问题： 人家还在开发， 刚好check out了一份有问题的版本下来make。 那是浪费时间。&lt;br&gt;* 就算是ubuntu的daily build都不是每天都make得过的。&lt;br&gt;&lt;br&gt;今天我取得的是changeset:&amp;nbsp;&amp;nbsp; 4476的代码。可以make得过。 &lt;br&gt;顺便看看那个牛B人最新的提交：&lt;br&gt;&lt;br&gt;changeset:&amp;nbsp;&amp;nbsp; 4398:683ed10f7832&lt;br&gt;user:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;b style="color: rgb(0, 0, 255);"&gt; Ken Thompson &lt;/b&gt;&amp;lt;ken@golang.org&amp;gt;&lt;br&gt;date:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Sat Dec 12 14:36:52 2009 -0800&lt;br&gt;summary:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; more on the optimizer&lt;br&gt;&lt;br&gt;golang的主页上其实就写得很清楚了。 只是有个容易出问题的地方： enviroment variable一节。&lt;br&gt;&lt;br&gt;&lt;b style="color: rgb(255, 0, 0);"&gt;请老实把提到的每个环境变量都export一次。 如果$GOBIN不是在PATH中的话， 请：&lt;br&gt;export PATH=${PATH}:${GOBIN}/bin&lt;/b&gt;&lt;br&gt;&lt;br&gt;其实只是这句需要注意的。&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-551125880941965706?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/551125880941965706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2009/12/golang.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/551125880941965706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/551125880941965706'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2009/12/golang.html' title='安装golang玩玩'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-2798067545246287235</id><published>2009-12-28T00:30:00.001-08:00</published><updated>2009-12-28T00:30:43.298-08:00</updated><title type='text'>C中检测头文件的存在</title><content type='html'>C中没有像python的try語句, 当需要引入系统的函数时会有个问题, 例子:&lt;br&gt;&lt;br&gt;&lt;h4&gt;1. 使引入外部函数时更加友好&lt;/h4&gt;try:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; import lxml&lt;br&gt;except:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "no exist lxml module"&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit()&lt;br&gt;&lt;br&gt;&lt;h4&gt;2. 根据情况使用不同的函数&lt;/h4&gt;try:&lt;br&gt;&amp;nbsp;&amp;nbsp; import lxml&lt;br&gt;except:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; try:&lt;br&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; import xml&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; except:&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; print "no exist lxml and xml module&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sys.exit()&lt;br&gt;&lt;br&gt;&lt;br&gt;在看同事的代码分析后, 知道了C是怎么处理这种问题: 使用preprocessor处理:&lt;br&gt;&lt;br&gt;# if ! defined _SYS_TYPES_H &lt;br&gt;you must include &amp;lt;sys/types.h&amp;gt; before including this file &lt;br&gt;# endif &lt;br&gt;&lt;br&gt;这将会产生错误, 不被编译. 这就把问题放在一个宏中. 那么这个宏是怎么获得的呢?&lt;br&gt;&lt;br&gt;这个问题抛给了GNU autoconf. 在autoconf产生的configure文件被运行后, 会产生一个叫config.h的头文件, 里面将会有系统所有的头文件的宏.&lt;br&gt;&lt;br&gt;如果C程序需要安全地使用外部函数. 这种机制无疑可以使编译过程更加友好.&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-2798067545246287235?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/2798067545246287235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2009/12/c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2798067545246287235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/2798067545246287235'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2009/12/c.html' title='C中检测头文件的存在'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-4242152855825279057</id><published>2009-12-27T08:46:00.001-08:00</published><updated>2009-12-27T08:46:48.477-08:00</updated><title type='text'>locale</title><content type='html'>python这部分与libc的函数相似.&lt;br&gt;&lt;br&gt;setlocale函数有两种用法:&lt;br&gt;1. 取得指定项的值: 第二个参数为None(Null)&lt;br&gt;&lt;br&gt;In [5]: locale.setlocale(locale.LC_CTYPE,None)&lt;br&gt;Out[5]: 'en_US.UTF-8'&lt;br&gt;&lt;br&gt;2. 设置locale&lt;br&gt;默认的locale都是C. &lt;br&gt;设置为指定的locale&lt;br&gt;In [6]: locale.setlocale(locale.LC_CTYPE, 'en_GB.UTF-8')&lt;br&gt;Out[6]: 'en_GB.UTF-8'&lt;br&gt;&lt;br&gt;当setlocale的第二个参数为空字符串时, 使用父进程的locale&lt;br&gt;In [2]: locale.setlocale(locale.LC_CTYPE, None)&lt;br&gt;Out[2]: 'C'&lt;br&gt;&lt;br&gt;In [3]: locale.setlocale(locale.LC_CTYPE, '')&lt;br&gt;Out[3]: 'en_US.UTF-8'&lt;br&gt;&lt;br&gt;&lt;br&gt;与locale有关的几个环境变量&lt;br&gt;LC_*&lt;br&gt;LC_ALL&lt;br&gt;LANG&lt;br&gt;&lt;br&gt;当LANG被定义, LC_*又没有定义时, LC_*都使用LANG的值, 当LC_*单独定义时, 会覆盖LANG的值.&lt;br&gt;当LANG没有被定义时, LC_*都为"POSIX"&lt;br&gt;当LC_ALL被定义时, LC_*都被强制使用LC_ALL的值, 这是最高的策略.&lt;br&gt;&lt;br&gt;还有一个GNU里定义的环境变量: LANGUAGE 它的作用与LC_MESSAGE的作用一致.&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;http://www.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap08.html#tag_08_02&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-4242152855825279057?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/4242152855825279057/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2009/12/locale.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4242152855825279057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/4242152855825279057'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2009/12/locale.html' title='locale'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-1350234980066594164</id><published>2009-12-27T08:37:00.001-08:00</published><updated>2009-12-27T20:23:36.494-08:00</updated><title type='text'>gcc的预处理选项</title><content type='html'>C的预处理选项在代码里很常见. 对控制生成的目标代码有控制作用. 如:&lt;br&gt;&lt;font face="Courier New"&gt;int main()&lt;br&gt;{&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; do_something();&lt;br&gt;&lt;br&gt;#ifdef __DEBUG__&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    printf("__DEBUG__ DEFINED\n");&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    printf("%d\n",A);&lt;br&gt;#endif&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return 0;&lt;br&gt;&lt;/font&gt;}&lt;br&gt;&lt;br&gt;可以通过__DEBUG__去控制是否加入测试代码. 现在就有个问题: 怎么在编译时改变这一个值? 如:&lt;br&gt;&lt;font face="Courier New"&gt;#if __DEBUG__ == 1&lt;br&gt;&lt;br&gt;难道要去修改源文件? 显然这是不对的做法. gcc是有参数去处理这些东西:&lt;br&gt;-D &lt;/font&gt;name=definition&lt;br&gt;&lt;br&gt;-U name&lt;br&gt;&lt;br&gt;下面做做测试:&lt;br&gt;jessinio@jessinio-laptop:/tmp$ cat test.c&lt;br&gt;&lt;br&gt;void *main(int argc, char *argv[]){&lt;br&gt;&lt;br&gt;#ifdef __DEBUG__&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", "debug info");&lt;br&gt;#endif&lt;br&gt;&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;jessinio@jessinio-laptop:/tmp$ gcc &lt;b style="color: rgb(0, 0, 255);"&gt;-E&lt;/b&gt; test.c&lt;br&gt;# 1 "test.c"&lt;br&gt;# 1 "&amp;lt;built-in&amp;gt;"&lt;br&gt;# 1 "&amp;lt;command-line&amp;gt;"&lt;br&gt;# 1 "test.c"&lt;br&gt;&lt;br&gt;&lt;br&gt;void *main(int argc, char *argv[]){&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;可以看出, 因为没有那个__DEBUG__ 宏, 所以printf没有被加入代码中. 如下就可以:&lt;br&gt;jessinio@jessinio-laptop:/tmp$ gcc &lt;b style="color: rgb(0, 0, 255);"&gt;-E -D__DEBUG__&lt;/b&gt; test.c&lt;br&gt;# 1 "test.c"&lt;br&gt;# 1 "&amp;lt;built-in&amp;gt;"&lt;br&gt;# 1 "&amp;lt;command-line&amp;gt;"&lt;br&gt;# 1 "test.c"&lt;br&gt;&lt;br&gt;&lt;br&gt;void *main(int argc, char *argv[]){&lt;br&gt;&lt;br&gt;&lt;br&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; printf("%s\n", "debug info");&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;}&lt;br&gt;&lt;br&gt;不过这有个问题, 就是每次都是在gcc命令中这样的参数不是很难看? 环境是环境变量? 找个Makefile看一下就知道了&lt;br&gt;看到这句:&lt;br&gt;# Compiler options&lt;br&gt;OPT=&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes&lt;br&gt;&lt;br&gt;很明显, 是使用变量的方式. gcc怎么知道呢?&lt;br&gt;又看到这句话:&lt;br&gt;$(CC) $(OPT) $(LDFLAGS) $(PGENOBJS) $(LIBS) -o $(PGEN)&lt;br&gt;&lt;br&gt;很明显, 就是在命令行中指定~~~~&amp;nbsp; (-_-)!&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7230785070080903190-1350234980066594164?l=jessinio.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://jessinio.blogspot.com/feeds/1350234980066594164/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://jessinio.blogspot.com/2009/12/gcc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1350234980066594164'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7230785070080903190/posts/default/1350234980066594164'/><link rel='alternate' type='text/html' href='http://jessinio.blogspot.com/2009/12/gcc.html' title='gcc的预处理选项'/><author><name>jessinio</name><uri>http://www.blogger.com/profile/01445075279923524034</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7230785070080903190.post-6425156909687111669</id><published>2009-12-27T01:43:00.001-08:00</published><updated>2009-12-27T01:51:24.948-08:00</updated><title type='text'>python默认对待unicode的方式</title><content type='html'>我不是故意去找问题的。 但是我很不喜欢问题不请自来。谁会愿意把青春花在这个鸟问题上面. &lt;br&gt;&lt;br&gt;不过话也说回来, 我又不玩游戏, 不下棋. 解决这个问题就当是一场“抓迷藏游戏”吧。&lt;br&gt;&lt;br&gt;这里, 主要涉及到两个编码问题:&lt;br&gt;1. 文件系统使用编码方式. 这个值由 sys.getfilesystemencoding() 取得&lt;br&gt;2. python的unicode函数使用的默认解码方式. 这个值由 sys.getdefaultencoding() 取得.&lt;br&gt;&lt;br&gt;世界的编码是非常之烦的一类事, 一看到locale -m的输出結果我就没有胃口了. 还是集中解决UTF-8, unicode, ascii之间的问题就够用了&lt;br&gt;&lt;br&gt;&lt;h2&gt;locale的重要性&lt;/h2&gt;可以说, locale对程序的行为影响是很大的. linux下的libc提供了机制方便处理这种问题. 举个例子:&lt;br&gt;jessinio@jessinio-laptop:/$ export LC_ALL='POSIX'&lt;br&gt;jessinio@jessinio-laptop:/$ locale&lt;br&gt;LANG=&lt;br&gt;LC_CTYPE="POSIX"&lt;br&gt;LC_NUMERIC="POSIX"&lt;br&gt;LC_TIME="POSIX"&lt;br&gt;LC_COLLATE="POSIX"&lt;br&gt;LC_MONETARY="POSIX"&lt;br&gt;LC_MESSAGES="POSIX"&lt;br&gt;LC_PAPER="POSIX"&lt;br&gt;LC_NAME="POSIX"&lt;br&gt;LC_ADDRESS="POSIX"&lt;br&gt;LC_TELEPHONE="POSIX"&lt;br&gt;LC_MEASUREMENT="POSIX"&lt;br&gt;LC_IDENTIFICATION="POSIX"&lt;br&gt;LC_ALL=POSIX&lt;br&gt;jessinio@jessinio-laptop:/$ bash&lt;br&gt;&lt;br&gt;这时的bash环境是无法使用中文的. &lt;b style="color: rgb(255, 0, 0);"&gt;就算你copy过去它也不买单&lt;/b&gt;, locale影响到程序对&lt;b&gt;字节流&lt;/b&gt;的处理方式(这水深, 主要是于C函数上, 这里先不钻进去). &lt;br&gt;&lt;br&gt;&lt;h2&gt;事件的源由&lt;/h2&gt;&lt;br&gt;前段时间把时区的问题搞清楚了。 今夜也跑来一个i18n问题。 只能发挥宅男的本色。碰个杀一个。&lt;br&gt;&lt;br&gt;这是一句很平常的語句： os.path.exists( path ), 在哪里使用都很正常。但是在mod_wsgi中使用就狗日的有问题：&lt;br&gt;&lt;br&gt;File "/home/jessinio/data/workspace/project/home/views.py" in index&lt;br&gt;&amp;nbsp; 32.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; os.path.exists(path)&lt;br&gt;File "/usr/lib/python2.6/genericpath.py" in exists&lt;br&gt;&amp;nbsp; 18.&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; st = os.stat(path)&lt;br&gt;&lt;br&gt;Exception Type: UnicodeEncodeError at /&lt;br&gt;Exception Value: ('ascii', u'/tmp/\u6881\u5e86\u559c', 5, 8, 'ordinal not in range(128)')&lt;br&gt;&lt;br&gt;os.stat出问题。为什么在一些地方python解释器可以解码， 但是在mod_wsgi中又无法解码？&lt;br&gt;&lt;br&gt;开始关注于C语言的i18n的处理方式。环境变量则是问题的入手点. 下面看一个证据：&lt;br&gt;python文件内容：&lt;br&gt;jessinio@jessinio-laptop:~$ cat /tmp/en.py &lt;br&gt;# coding: utf-8&lt;br&gt;import os&lt;br&gt;&lt;br&gt;s = u'/tmp/梁庆喜'&lt;br&gt;os.path.exists(s)&lt;br&gt;&lt;br&gt;# 下面证明了LANG环境变量的作用:&lt;br&gt;jessinio@jessinio-laptop:~$ env|grep LANG&lt;br&gt;&lt;b style="color: rgb(0, 0, 255);"&gt;LANG=en_US.UTF-8&lt;/b&gt;&lt;br&gt;GDM_LANG=en_US.UTF-8&lt;br&gt;jessinio@jessinio-laptop:~$ python /tmp/en.py&lt;br&gt;&lt;br&gt;jessinio@jessinio-laptop:~$ export &lt;b style="color: rgb(0, 0, 255);"
