易截截图软件、单文件、免安装、纯绿色、仅160KB

C标准库源码解剖(13):输入输出函数stdio.h

    C标准中的I/O库是一个比较庞大的库,实现也比较复杂。显然I/O库的实现是依赖于操作系统的,不同的系统上I/O库的实现机理是不一样的。glibc中,I/O库的核心实现在libio目录下。有4个头文件libio.h, iolibio.h, libioP.h, strfile.h, stdio.h,其中stdio.h是导出的标准C头文件,其余都是内部实现。这里并不打算解剖整个I/O库的源代码(那样可能一本书也说不完),只是概述性的介绍一下它的轮廓和所有标准接口的功能。我们学习I/O库也是为了能在实践中应用它,因此因此对C标准中所有的I/O接口要有个全面的了解。
    输入/输出函数主要在stdio.h中,对应的宽字符版本在wchar.h中,下面列出标准C中定义的所有接口:
    1、相关类型和常量:FILE、EOF在stdio.h中;wchar_t、wint_t、WEOF、WCHAR_MAX、WCHAR _MIN等在wchar.h中定义。size_t和NULL在stdio.h, wchar.h和stddef.h均会定义,同时使用其中的多个头文件是无害的。
    2、fopen,fclose,fflush,frepoen,fwide,FOPEN_MAX,FILENAME_MAX:打开文件并返回数据流、关闭文件、清空数据流的缓冲区、将文件重新关联到一个数据流、fwide在wchar.h中用于设置与测试流定向、可以同时打开的数据流最大个数、文件名的最大长度。
    文件访问方式:”r”、”w”、”a”、”r+”、”w+”、”a+”,所有访问方式后面都可以加上字母b,表示数据流保存二进制数据,而不是字符数据。
    3、setvbuf,setbuf,BUFSIZ,_IOFBF,_IOLBF,_IONBF:设置数据流的缓冲区、BUFSIZ缓冲区的默认长度、后面三个是缓冲模式,为数完全缓冲、行缓冲(写入换行符或缓冲区满时刷新缓冲区)、数据流不缓冲。
    4、stdin,stdout,stderr:标准输入流、输出流、错误流。除stderr之外,另外两个数据流都缓冲。C语言程序执行时,会预先打开这3种文本流。
    5、fseek,ftell,rewind,fgetops,fsetpos:设置流的读写位置、返回流的当前读写位置、将流的位置恢复到开头、fgetpos/fsetpos用于获取或设置流的位置,其值放在fpos_t类型的参数中。定位码有SEEK_SET, SEEK_CUR,SEEK_END。
    6、fgetc,fgetwc,getc,getwc,getchar,getwchar,ungetc,ungetwc:从流中读取下一个字符并作为int类型的值返回、getchar则从标准输入流中


相关文档:

C/C++ 笔记(零碎点)

1)a = a + 5; 与 a += 5;的区别。
    二者在广义上是等价。D.Ritchie 在C语言中引入复合运算符的主要目的是为了提高编译的效率以产生高质量的执行代码。因为这些运算符的功能基本上都能用一二条机器指令来完成。
2)在C++中long 与 int 的区别
NameDescriptionSize*Range*
char
Character or s ......

华为C/C++笔试题2

  华为C/C++笔试题2 收藏
1. 某32位系统下, C++程序,请计算sizeof 的值
#include <stdio.h>
#include <malloc.h>
void Foo ( char str[100] )
{
    printf("sizeof(str)=%d \n", sizeof(str) );//此处使用char *str与char str[100]是一样的,char str[100]不指明大小(char str[]) ......

华为C/C++笔试题3

1. 找错
#define MAX_SRM 256
DSN get_SRM_no()
{
    static int SRM_no;
    int I;
    for(I=0;I<MAX_SRM;I++,SRM_no++)
    {
        SRM_no %= MAX_SRM;
        ......

linux 下 用c语言创建mysql数据库笔记(二)

linux 下 用c语言创建mysql数据库笔记(二)
                       
-------两个简单的例子,供参考比较
《例一》
#include <stdio.h>
#include <stdlib.h>
#include
&q ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号