现在的位置: 首页 > 综合 > 正文

C语言实现UNIX中一次读入一个字符

2013年12月03日 ⁄ 综合 ⁄ 共 687字 ⁄ 字号 评论关闭

本文参考了《C专家编程》。在此基础上添加了部分注释。

在UNIX中,默认整行读入一起处理。有两种方法可以实现逐字符读入,即不按回车就可以从中断读入一个字符。

方法一:使用stty程序——阻塞读入,如果中断没有字符输入进程就一直等待。

#include <stdio.h>
int main()
{
    char ch;
    system("stty raw"); //开启一次读一个字符的模式
    ch = getchar();
    printf("it's %c\n",ch);
    system("stty cooked"); //关闭一次读一个字符的模式
    return 0;
}

方法二:使用ioctl()实现——非阻塞读入,轮询形式,只有当一个字符等待被读入时才进行读取。

#include <stdio.h>
#include <sys/ioctl.h>


int main()
{
    int i,num;
    char ch = ' ';
    system("stty raw -echo"); //-echo表示按键时并不回显在屏幕
    printf("enter 'q' to quit\n");
    for(i = 0 ;ch != 'q'; i++) //一直轮询
    {
        ioctl(0,FIONREAD,&num); //获得从终端可以读取的字符的计数值
        if(num > 0) //如果>0,即终端有字符可以读入的话则读入
        {
            ch = getchar();
            printf("\n got %c on iteration %d",ch,i);
        }
    }
    system("stty cooked echo"); //关闭一次一字符模式并恢复按键时屏幕的回显功能
}

抱歉!评论已关闭.