<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[请教c语言的read函数的用法]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Tue, 11 Mar 2008 09:50:02 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<a href="http://hi.baidu.com/kofeffect/blog/item/5b71cefb9f6f51126d22ebd1.html" target="_blank">http://hi.baidu.com/kofeffect/blog/item/5b71cefb9f6f51126d22ebd1.html</a><br/><br/>最近开始从事搜索引擎的工作,所以又重新开始了c/c++的旅程,时隔4年<br/>不得不复习一下c/c++其中的内容,以下内容有网上别的朋友发表的,也有我自己总结的.<br/><br/>1. read<br/><br/>#include <unistd.h><br/><br/>ssize_t read(int filedes, void *buf, size_t nbytes);<br/><br/>返回值：读取到的字节数；0（读到 EOF）；-1（出错）<br/><br/>read 函数从 filedes 指定的已打开文件中读取 nbytes 字节到 buf 中。以下几种情况会导致读取到的字节数小于 nbytes ：<br/><br/>A. 读取普通文件时，读到文件末尾还不够 nbytes 字节。例如：如果文件只有 30 字节，而我们想读取 100 字节，那么实际读到的只有 30 字节，read 函数返回 30 。此时再使用 read 函数作用于这个文件会导致 read 返回 0 。<br/><br/>B. 从终端设备（terminal device）读取时，一般情况下每次只能读取一行。<br/><br/>C. 从网络读取时，网络缓存可能导致读取的字节数小于 nbytes 字节。<br/><br/>D. 读取 pipe 或者 FIFO 时，pipe 或 FIFO 里的字节数可能小于 nbytes 。<br/><br/>E. 从面向记录（record-oriented）的设备读取时，某些面向记录的设备（如磁带）每次最多只能返回一个记录。<br/><br/>F. 在读取了部分数据时被信号中断。<br/><br/>读操作始于 cfo 。在成功返回之前，cfo 增加，增量为实际读取到的字节数。<br/><br/><br/>2. write<br/><br/>#include <unistd.h><br/><br/>ssize_t write(int filedes, const void *buf, size_t nbytes);<br/><br/>返回值：写入文件的字节数（成功）；-1（出错）<br/><br/>write 函数向 filedes 中写入 nbytes 字节数据，数据来源为 buf 。返回值一般总是等于 nbytes，否则就是出错了。常见的出错原因是磁盘空间满了或者超过了文件大小限制。<br/><br/>对于普通文件，写操作始于 cfo 。如果打开文件时使用了 O_APPEND，则每次写操作都将数据写入文件末尾。成功写入后，cfo 增加，增量为实际写入的字节数。<br/><br/><br/>int main(int argc, char *argv[])<br/>&#123;<br/>int fd;<br/>int nread;<br/>//void *buf;<br/>char buff[512];<br/>//buf=&buff;<br/>//printf ("%d",buf);<br/>char *dev ="/dev/ttyS1";<br/>/* 打开指定的串口设备 */<br/>fd = OpenDev(dev);<br/><br/>if (fd>0) &#123;<br/>set_speed(fd);<br/>&#125;<br/>else &#123;<br/>printf("Can't Open Serial Port!&#92;n");<br/>exit(1);<br/>&#125;<br/><br/>/* 设置串口的参数 */<br/>if (set_para(fd)== 1) &#123;<br/>printf("Set Parity Error&#92;n");<br/>exit(1);<br/>&#125;<br/><br/>/* 在后台守候，检查缓冲区内是否有内容，并将缓冲区的<br/>内容显示出来*/<br/>while(1) &#123;<br/>int nread;<br/>while ((nread = read(fd,buff,512))>0) &#123;<br/>printf ("nnread is %d&#92;n",nread);<br/>buff[nread+1]='&#92;0';<br/><br/>int i;<br/>for (i=0;i<nread;i++ )&#123;<br/>printf ("buff is %c&#92;n",buff[i]);<br/>&#125;<br/><br/>printf ("buf is %s&#92;n",buff);<br/>&#125;<br/><br/>&#125;<br/>&#125;<br/><br/>上面是我写的一段程序，目的就是将串口收到的字符显示在控制台上。<br/>现在我可以打印出nnread is "收到的字符的个数"，但是无法打印出接收到的字符。<br/>我想打印buff这个数组。但是无论如何也打印不出来。<br/>我把这个数组定义成int形的。然后就可以打印出一些数字，我猜可能是ascii码值。<br/>我没有看懂read函数的参数的具体的用法，特别是第二项那个指针。
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 请教c语言的read函数的用法]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>