您的位置:首页 > 运维架构 > Linux

man stdio

2014-03-25 03:21 891 查看
描述:

        标准输入/输出库提供了一个简单高效的输入/输出缓冲流接口。输入和输出被映射成了逻辑数据流,从而隐藏了输入/输出在物理上的特性。具体的函数和宏命令列在了下面;更多的信息可从man手册的其它部分获取。

        一个流可以通过打开一个文件来与外部文件相连(这个文件也有可能是物理设备),这样可能导致要创建一个新文件。创建一个已经存在的文件会导致先前的文件内容被删除。如果一个文件能够支持定位功能(比如。。。),那么和流相关联的文件定位器就会定位到文件的起始位置,除非这个文件是以append模式打开的。在append模式下,并未指明文件定位器会定位到文件的起始位置或是结束位置。这种定位器也被后来的reads,writes和一些有定位需求的所保留。所有对文件的输入看起来就像通过对fgetc(3)函数的连续调用将多个字符读出;同理,所有文件的输出也像是通过对fputc(3)函数的连续调用而将多个字符写入。

        通过关闭一个文件可以将文件与流分离。在文件与流断开之前,输出流就已经flush过了(任何还没来得及写入的缓冲文件会被转入到主机环境下)。文件指针也会因文件的关闭而失去具体的含义(作废了)。

       一个文件随后也许又会被同一个或另一个程序打开,并且它的内容会被修改甚至重写(如果能重新定位到文件的起始位置的话)。如果主函数返回了或者exit(3)函数被调用了,那么此时所有处于打开状态的文件都会在程序结束前被关闭。其他结束程序的方法,比如abort(3)则不会关心文件是否已正常关闭。

      在程序启动时,有三个文本流就已被预定义了,并且明确禁止打开:标准输入文件(for reading convertional input),标准输出文件(for writing conventional input),标准错误文件(for writing diagnostic output)。这些流简写为stdin,stdout和stderr。在这三个文件被打开时,当且仅当这些流没有涉及交互设备时:标准错误流是非完全缓冲,而标准输入输出流则是完全缓冲。

      涉及到终端设备的输出流总是默认为行缓冲;任何时候与终端设备有关的输入流被写入时,行将发生的输出都会被自动地写入到输出流中。这也是为什么打印了一行缓冲的一部分到终端上后再进行大量的计算前,很有必要对标准输出缓冲进行fflush(3)的操作了。这样就能输出我们想要的结果了。

      stdio库是libc库的一部分,并且当需要的时候,程序会通过cc(1)和pc(1)编译器自动加载。下文的提纲部分说明了哪个包含文件将会被用到、编译器对函数的声明是什么样的以及用到了哪些外部变量。

      下面是声明的宏;这些宏名称可能在没有用“#undef”消除原意前不能被使用:....

注:this page is part of release 3.54 of the Linux man-pages project.

referece: youdao dictionary
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息