Linux 中C语言如何清空标准输入流,linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 。

jackxiang 2014-8-4 18:03 | |

今天在Linux程序设计的时候需要清空标准输入缓冲区,于是使用了如下Windows程序设计中的方法:
1.fflush(stdin);这个fflush()函数根本不是标准C中的函数,只是标准C的扩展,所以在Linux中使用根本不行;
2.中网上搜索了下,发现有网友建议使用rewind(stdin);这个函数其实是将指针指向流的开始处。但是它是文件操作中的一个函数,操作的是FILE型流,在Windows程序设计中是可以清空标准输入缓冲区的,但是在Linux中不行。
3.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区,使用的函数是getchar(),此函数的作用是从标准输入缓冲区中读出一个字符,此方法中Linux中可行。
如果需要清除stdin可以通过如下循环实现:
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
以上语句将清除stdin中的字符,知道遇到换行符或者是读完缓冲区。

以上的方法均可以在Windows程序设计中用来清除缓冲区;

4.在Linux程序设计中也还是有一种用来清空stdin中的方法,直接调用如下的函数:
setbuf(stdin, NULL);
此函数我还没有来得及测试;

通过以上分析,在Linux下清空stdin用两种方法:
1.通过读取剩余的字符并丢弃掉;
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
或者是:
char s[1024];
fgets(s,1024,stdin);
2.使用函数setbuf(stdin,NULL);

以上跟大家分享,如有更好的方法请指出,谢谢。

来自:http://blog.csdn.net/wesleyluo/article/details/4823858

linux下C语言实现动态分配的缓冲区保存多个ascii码字符串首地址 :
操作系统:ubuntu10.04

前言
    很多时候,pc控制下位机,都是通过串口或web,多以ascii码直接通信。在数据较少时,可直接申请一个缓冲区,发送所需数据;但是在很多时候,发送的数据会非常大,直接申请一个非常大的缓冲区并不是一个好的方法。因此可以申请一个小的缓冲区,然后把各个ascii字符串的首地址复制到该缓冲区中,然后发送时,循环读取这个缓冲区的地址内容,发送ascii码字符串。

一,实现  vi bufferarea.c
#include
#include
#include

char    *s1 = "hello world\n";
char    *s2 = "wo shi zhong guo ren\n";
char    *s3 = "i am a chinese\n";
void     *data = NULL;

void    init_data(void)
{
    char **ptr = ((char**)data);
    

    (*ptr)     = s1;
    printf("1 %p,%p,%s\n",ptr,s1,*ptr);
    ++ptr;
    
    (*ptr)     = s2;
    printf("2 %p,%p,%s\n",ptr,s2,*ptr);
    ++ptr;
    
    (*ptr)     = s3;
    printf("3 %p,%p,%s\n",ptr,s3,*ptr);
    ++ptr;
    
    ptr        = NULL;

    printf("data1 %x\n",*(int*)data);
    
}

void     show_data(void)
{
    char **ptr = (char**)data;

    while((*ptr) != NULL)
    {
        printf("%s\n",*ptr);
        ++ptr;
    }
}    

int main(void)
{
    data = malloc(256);
    memset(data,0,256);
    printf("alloc success\n");
    
    init_data();

    printf("init success\n");

    show_data();

    free(data);
    printf("free success\n");
    
    return 0;
}


二,结果
[root@jackxiang bufferarea]# vi bufferarea.c
[root@jackxiang bufferarea]# make bufferarea
cc     bufferarea.c   -o bufferarea
[root@jackxiang bufferarea]# ./bufferarea
alloc success
1 0x75b010,0x400878,hello world

2 0x75b018,0x400885,wo shi zhong guo ren

3 0x75b020,0x40089b,i am a chinese

data1 400878
init success
hello world

wo shi zhong guo ren

i am a chinese

free success

来自:http://blog.chinaunix.net/uid-28458801-id-4297123.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/7366/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!

评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]