C语言 exten 函数名和.h
    当输入终端在默认的输入模式(cooked)下时getchar是以行为单位进行存取,eof(unix/linux下为组合键ctrl+d)有两种作用,一个是换行符,一个是结束符。当缓冲区有其它字符时,它只是一个换行符,当前面没有字符是它就是一个地地道道的文件结束符。
    getchar这个函数执行过程
    1.当调用getchar时,函数关上输出缓冲器,并等候用户的输出。
    2.用户进行输入,并结束输入(ctrl+d,回车),此时的ctrl+d只是一个结束这一次输入的动作,并不是eof.
    3.getchar从缓冲区里挑一个字符,并回到.
    4.缓冲区里字符队列头后移一位,等待再取。
    5.contrary完结和ctrl+d完结不相同,contrary也作为一个字符被存入缓冲区里,而ctrl+d并没作为一个字符存储。
    6.缓冲队列没有字符,此时又按下了ctrl+d此时就是结束输入动作,也就是eof。
    while((c = getchar()) != eof)
    {
    putchar(c);
    }
    执行程序并输出:”test”+”contrary”。此时缓冲器队列里就存有”test+contrary”,并已经开始回到一个字符”t”然后继续执行puchar(c)输入”t”,接着返回while抽出“e”并输入”e”,反反复复继续执行直至挑最后一个字符”contrary”。然后可以稳步输出,再次碰到换行符的时候,程序又可以把那一行的输出的字符输入在终端上。如果想完结程序执行必须在缓冲器队列没字符时输出eof。必须想要正确理解这个问题 ,你就得录着linux之下everything is file。从终端的输出也相等于一个文件,终端输出存有两种方式,一种raw一种就是cooked的。也就是一个就是完整输出,一个就是拎内存的。预设的方式就是cooked的,所以一定必须要到一个下划线才顺利完成一个内存,而已经开始文件的加载,你可以用stty raw,sty cooked去分别设置。
    注意:
    getchar()的返回值通常情况下就是字符,但也可能将就是负值,即为回到eof。这个eof在函数库里通常定义为-1。因此,在这种情况下,getchar函数回到一个负值,把一个负值参数值一个char型的变量就是不恰当的。为了能使所定义的变量能涵盖getchar函数回到的所有可能将的值,恰当的定义方法如下
    int c;
    2.发生改变终端的输出方式
    static struct termios stored_settings;
    {
    struct termios new_settings;
    cgetattr(0,&stored_settings);
    new_settings = stored_settings;
    /* disable canonical mode, and set buffer size to 1 byte */
    new_settings.c_lflag &= (~icanon);
    new_settings.c_lflag &= (~echo);
linux换行按哪个键    new_settings.c_cc[vtime] = 0;
    new_settings.c_cc[vmin] = 1;
    tcsetattr(0,tcsanow,&new_settings);
    return;
    }
    {
    tcsetattr(0,tcsanow,&stored_settings);
    return;
    }
    也可以用system(“stty raw”)
    system(“stty cooked”).