﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-默然前行-随笔分类-unix</title><link>http://www.cppblog.com/jimzshi/category/8248.html</link><description>write whatever i think.</description><language>zh-cn</language><lastBuildDate>Sat, 13 Sep 2008 06:20:16 GMT</lastBuildDate><pubDate>Sat, 13 Sep 2008 06:20:16 GMT</pubDate><ttl>60</ttl><item><title>unix I/O (2) -- write()</title><link>http://www.cppblog.com/jimzshi/archive/2008/09/12/61689.html</link><dc:creator>Zech</dc:creator><author>Zech</author><pubDate>Fri, 12 Sep 2008 08:23:00 GMT</pubDate><guid>http://www.cppblog.com/jimzshi/archive/2008/09/12/61689.html</guid><wfw:comment>http://www.cppblog.com/jimzshi/comments/61689.html</wfw:comment><comments>http://www.cppblog.com/jimzshi/archive/2008/09/12/61689.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jimzshi/comments/commentRss/61689.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jimzshi/services/trackbacks/61689.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: unix I/O 系列第2，write()&nbsp;&nbsp;<a href='http://www.cppblog.com/jimzshi/archive/2008/09/12/61689.html'>阅读全文</a><img src ="http://www.cppblog.com/jimzshi/aggbug/61689.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jimzshi/" target="_blank">Zech</a> 2008-09-12 16:23 <a href="http://www.cppblog.com/jimzshi/archive/2008/09/12/61689.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>c++ template (1) -- template template parameters</title><link>http://www.cppblog.com/jimzshi/archive/2008/09/12/61659.html</link><dc:creator>Zech</dc:creator><author>Zech</author><pubDate>Fri, 12 Sep 2008 02:23:00 GMT</pubDate><guid>http://www.cppblog.com/jimzshi/archive/2008/09/12/61659.html</guid><wfw:comment>http://www.cppblog.com/jimzshi/comments/61659.html</wfw:comment><comments>http://www.cppblog.com/jimzshi/archive/2008/09/12/61659.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/jimzshi/comments/commentRss/61659.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jimzshi/services/trackbacks/61659.html</trackback:ping><description><![CDATA[<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;V,template</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">typename&nbsp;E,&nbsp;typename&nbsp;A&nbsp;</span><span style="COLOR: #000000">=</span><span style="COLOR: #000000">&nbsp;std::allocator</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">E</span><span style="COLOR: #000000">&gt;&gt;</span><span style="COLOR: #000000">&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;F</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000">&nbsp;<br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000">&nbsp;&nbsp;</span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000">&nbsp;MyClass&nbsp;{};</span></div>
上面这段代码声明了一个模板类MyClass。MyClass有两个类型参数typename V和class F，其中class F又是一个模板类。注意这种声明方式。 
<img src ="http://www.cppblog.com/jimzshi/aggbug/61659.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jimzshi/" target="_blank">Zech</a> 2008-09-12 10:23 <a href="http://www.cppblog.com/jimzshi/archive/2008/09/12/61659.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>read/write(1) -- read</title><link>http://www.cppblog.com/jimzshi/archive/2008/09/12/61657.html</link><dc:creator>Zech</dc:creator><author>Zech</author><pubDate>Fri, 12 Sep 2008 02:01:00 GMT</pubDate><guid>http://www.cppblog.com/jimzshi/archive/2008/09/12/61657.html</guid><wfw:comment>http://www.cppblog.com/jimzshi/comments/61657.html</wfw:comment><comments>http://www.cppblog.com/jimzshi/archive/2008/09/12/61657.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.cppblog.com/jimzshi/comments/commentRss/61657.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/jimzshi/services/trackbacks/61657.html</trackback:ping><description><![CDATA[<p><span style="FONT-FAMILY: 黑体">函数名：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read - 从文件描述字中读<br><br><span style="FONT-FAMILY: 黑体">摘要：</span></p>
<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span>&nbsp;<span style="COLOR: #000000">#include&nbsp;</span><span style="COLOR: #000000">&lt;</span><span style="COLOR: #000000">unistd.h</span><span style="COLOR: #000000">&gt;</span><span style="COLOR: #000000"><br></span><span style="COLOR: #008080">2</span>&nbsp;<span style="COLOR: #000000"><br></span><span style="COLOR: #008080">3</span>&nbsp;<span style="COLOR: #000000">ssize_t&nbsp;read(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000">&nbsp;fd,&nbsp;</span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">&nbsp;buf,&nbsp;size_t&nbsp;cnt);</span></div>
<br><span style="FONT-FAMILY: 黑体">描述：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;read()试图从文件描述字fd中读取cnt字节到以buf开始的缓冲区中。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果cnt为0，read()返回0并且buf中没有结果；如果cnt大于SSIZE_MAX，结果为定义。<br><br><span style="FONT-FAMILY: 黑体">返回值：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;如果成功，返回读取的字节数`ret'（非负，0代表遇到了文件结束符），并且文件位置前移ret字节。如果ret&lt;cnt并不代表出错；例如，这种情况可能是由于当前只有ret字节可用（可能是因为已经接近文件结束，或者因为我们正从管道或终端中读取），也可能由于read()被信号中断。如果出错，返回-1。在这种情况下，文件位置是否改变是未定义行为。<br><br><span style="FONT-FAMILY: 黑体">错误号：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EINTR&nbsp;&nbsp;&nbsp;该调用在读完数据之前被信号中断。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EAGAIN&nbsp;&nbsp;&nbsp;用O_NONBLOCK选择了非阻塞模式I/O，但是当前没有数据可用。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EIO&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I/O错误。例如这种情况可能发生在当前进程为后台运行组，试图从它所控制的tty中读取，但是该终端为当前无效或者屏蔽了SIGTTIN信号又或者该终端进程为&#8220;孤儿进程&#8221;（orphan process)。 当从磁盘中读取数据时遇到底层I/O错误时，也会发生这种情况。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EISDIR&nbsp;&nbsp;&nbsp;fd引用了一个目录。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EBADF&nbsp;&nbsp;&nbsp;fd不是有效文件描述字，或者没有为读打开。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EINVAL&nbsp;&nbsp;&nbsp;fd引用了一个不支持读操作的设备。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;EFAULT&nbsp;&nbsp;&nbsp;buf超出了可访问地址空间。<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;其他错误也会发生，这取决于fd所连接的设备。 POSIX允许read调用在读取部分数据后被信号中断后，或者返回-1（错误号被置为EINTR)，或者返回已经读取的字节数。<br><br><span style="FONT-FAMILY: 黑体">规范：</span><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SVr4, SVID, AT&amp;T, POSIX, X/OPEN, BSD 4.3<br><br><span style="FONT-FAMILY: 黑体">约束：<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;在NFS文件系统中，读取小量数据只在第一次时更新时间戳，而后续调用不会更新。这是由客户端属性缓存（client side attribute caching)导致的，因为绝大多数NFS客户端让server维护atime（最后访问时间），而客户端read调用所产生的读操作没有造成server端的读操作从而也不会导致server更新atime。可以通过禁用客户端属性缓存以获得UNIX语义，但事实证明大多数情况下这会增加server负载并降低性能。<br><br><span style="FONT-FAMILY: 黑体">参考：<br></span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close(2), fcntl(2), ioctl(2), lseek(2), readdir(2), readlink(2), select(2), write(2), fread(3), readv(3)<br><br>
<img src ="http://www.cppblog.com/jimzshi/aggbug/61657.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/jimzshi/" target="_blank">Zech</a> 2008-09-12 10:01 <a href="http://www.cppblog.com/jimzshi/archive/2008/09/12/61657.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>