<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>https://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>https://jackxiang.com/post//</link>
<title><![CDATA[ Linux 中C语言如何清空标准输入流，linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[Unix/LinuxC技术]]></category>
<pubDate>Mon, 04 Aug 2014 10:03:44 +0000</pubDate> 
<guid>https://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>今天在Linux程序设计的时候需要清空标准输入缓冲区，于是使用了如下Windows程序设计中的方法：<br/>1.fflush(stdin)；这个fflush()函数根本不是标准C中的函数，只是标准C的扩展，所以在Linux中使用根本不行；<br/>2.中网上搜索了下，发现有网友建议使用rewind(stdin)；这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数，操作的是FILE型流，在Windows程序设计中是可以清空标准输入缓冲区的，但是在Linux中不行。<br/>3.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区，使用的函数是getchar()，此函数的作用是从标准输入缓冲区中读出一个字符，此方法中Linux中可行。<br/>如果需要清除stdin可以通过如下循环实现：<br/>char ch;<br/>while((ch=getchar())!='/n'&&ch!=EOF);<br/>以上语句将清除stdin中的字符，知道遇到换行符或者是读完缓冲区。<br/> <br/>以上的方法均可以在Windows程序设计中用来清除缓冲区；<br/> <br/>4.在Linux程序设计中也还是有一种用来清空stdin中的方法，直接调用如下的函数：<br/>setbuf(stdin, NULL);<br/>此函数我还没有来得及测试；<br/> <br/>通过以上分析，在Linux下清空stdin用两种方法：<br/>1.通过读取剩余的字符并丢弃掉；<br/>char ch;<br/>while((ch=getchar())!='/n'&&ch!=EOF);<br/>或者是：<br/>char s[1024];<br/>fgets(s,1024,stdin);<br/>2.使用函数setbuf(stdin,NULL);<br/> <br/>以上跟大家分享，如有更好的方法请指出，谢谢。<br/><br/>来自：http://blog.csdn.net/wesleyluo/article/details/4823858<br/><br/>linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 ：<br/>操作系统：ubuntu10.04<br/><br/>前言<br/>&nbsp;&nbsp;&nbsp;&nbsp;很多时候，pc控制下位机，都是通过串口或web，多以ascii码直接通信。在数据较少时，可直接申请一个缓冲区，发送所需数据；但是在很多时候，发送的数据会非常大，直接申请一个非常大的缓冲区并不是一个好的方法。因此可以申请一个小的缓冲区，然后把各个ascii字符串的首地址复制到该缓冲区中，然后发送时，循环读取这个缓冲区的地址内容，发送ascii码字符串。<br/><br/>一，实现&nbsp;&nbsp;vi bufferarea.c<br/>#include <stdio.h><br/>#include <stdlib.h><br/>#include <string.h><br/><br/>char&nbsp;&nbsp;&nbsp;&nbsp;*s1 = "hello world&#92;n";<br/>char&nbsp;&nbsp;&nbsp;&nbsp;*s2 = "wo shi zhong guo ren&#92;n";<br/>char&nbsp;&nbsp;&nbsp;&nbsp;*s3 = "i am a chinese&#92;n";<br/>void&nbsp;&nbsp;&nbsp;&nbsp; *data = NULL;<br/><br/>void&nbsp;&nbsp;&nbsp;&nbsp;init_data(void)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char **ptr = ((char**)data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;(*ptr)&nbsp;&nbsp;&nbsp;&nbsp; = s1; <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("1 %p,%p,%s&#92;n",ptr,s1,*ptr);<br/>&nbsp;&nbsp;&nbsp;&nbsp;++ptr; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;(*ptr)&nbsp;&nbsp;&nbsp;&nbsp; = s2;<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("2 %p,%p,%s&#92;n",ptr,s2,*ptr);<br/>&nbsp;&nbsp;&nbsp;&nbsp;++ptr; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;(*ptr)&nbsp;&nbsp;&nbsp;&nbsp; = s3; <br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("3 %p,%p,%s&#92;n",ptr,s3,*ptr);<br/>&nbsp;&nbsp;&nbsp;&nbsp;++ptr; <br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;ptr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= NULL;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("data1 %x&#92;n",*(int*)data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&#125;<br/><br/>void&nbsp;&nbsp;&nbsp;&nbsp; show_data(void)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;char **ptr = (char**)data;<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;while((*ptr) != NULL)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%s&#92;n",*ptr);<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;++ptr;<br/>&nbsp;&nbsp;&nbsp;&nbsp;&#125;<br/>&#125;&nbsp;&nbsp;&nbsp;&nbsp;<br/><br/>int main(void)<br/>&#123;<br/>&nbsp;&nbsp;&nbsp;&nbsp;data = malloc(256);<br/>&nbsp;&nbsp;&nbsp;&nbsp;memset(data,0,256);<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("alloc success&#92;n");<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;init_data();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("init success&#92;n");<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;show_data();<br/><br/>&nbsp;&nbsp;&nbsp;&nbsp;free(data);<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf("free success&#92;n");<br/>&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0;<br/>&#125;<br/><br/><br/>二，结果<br/>[root@jackxiang bufferarea]# vi bufferarea.c<br/>[root@jackxiang bufferarea]# make bufferarea<br/>cc&nbsp;&nbsp;&nbsp;&nbsp; bufferarea.c&nbsp;&nbsp; -o bufferarea<br/>[root@jackxiang bufferarea]# ./bufferarea <br/>alloc success<br/>1 0x75b010,0x400878,hello world<br/><br/>2 0x75b018,0x400885,wo shi zhong guo ren<br/><br/>3 0x75b020,0x40089b,i am a chinese<br/><br/>data1 400878<br/>init success<br/>hello world<br/><br/>wo shi zhong guo ren<br/><br/>i am a chinese<br/><br/>free success<br/><br/>来自：http://blog.chinaunix.net/uid-28458801-id-4297123.html<br/>
]]>
</description>
</item><item>
<link>https://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论]  Linux 中C语言如何清空标准输入流，linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>