zoukankan      html  css  js  c++  java
  • 5.5 打开流

    5.5 打开流

    下列三个函数打开一个标准I/O流。

    ·         #include <stdio.h>

    · FILE *fopen(const char *restrict pathname, const char *restrict type);

    · FILE *fropen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);

    · FILE *fdopen(int filedes, const char *type);

    返回值:成功返回文件指针,出错返回NULL

    1.     fopen打开一个指定的文件。

    2.     freopen在一个指定的流上打开一个指定的文件,如若该流已经打开,则先关闭流。若该流已经定向,则freopen清除该定向。此函数一般用于将一个指定的文件打开为一个预定义的流:标准输入、标准输出或标准出错。

    3.     fdopen获取一个现有的文件描述符,并使一个标准的I/O流与该描述符相结合。此函数常用于由创建管道和网络通信通道函数返回的描述符。因为这些特殊类型的文件不能用标准I/O fopen函数打开,所以必须先调用设备专用函数以获得一个文件描述符,然后用fdopen使一个标准I/O流与该描述符相关联。

    fopenfreopenISO C的所属部分。而ISO C并不涉及文件描述符,所以仅有POSIX.1具有fdopen

    type参数指定对该I/O流的读、写方式,ISO C规定type参数可以有15种不同的值,它们示于表5.2中。

    type

    Description

    r rb

    open for reading

    wwb

    truncate to 0 length or create for writing

    aab

    append; open for writing at end of file, or create for writing

    r+r+brb+

    open for reading and writing

    w+w+bwb+

    truncate to 0 length or create for reading and writing

    a+a+bab+

    open or create for reading and writing at end of file

    5.2 打开标准I/O流的type参数

    对于fdopentype参数的意义稍有区别。因为该描述符已被打开,所以fdopen为写而打开并不截短该文件。

    当以读和写类型打开一个文件时(type+符号),具有下列限制:

    ·         如果中间没有fflushfseekfsetposrewind,则在输出的后面不能直接跟随输入。

    ·         如果中间没有fseekfsetposrewind,或者一个输入操作没有到达文件尾端,则在输入操作之后不能直接跟随输出。

    Restriction

    r

    w

    a

    r+

    w+

    a+

    file must already exist

       

       

    previous contents of file discarded

     

       

     

    stream can be read

       

    stream can be written

     

    stream can be written only at end

       

       

    5.3 打开一个标准I/O流的6种不同的方式

    注意,在指定wa类型创建一个新文件时,我们无法说明该文件的访问权限位。除非引用终端设备,否则按系统默认的情况,流被打开时是全缓冲的。若流引用终端设备,则该流是行缓冲的。一旦打开了流,那么在对该流执行任何操作之前,如果希望,则可使用上一节所述的setbufsetvbuf改变缓冲的类型。

    调用fclose关闭一个打开的流。

    ·         #include <stdio.h>

    · int fclose(FILE *fp);

    返回值:成功返回0,出错返回EOF

    在该文件被关闭之前,冲洗缓冲区中的输出数据。丢弃缓冲区中的任何输入数据。

    当一个进程正常终止时(直接调用exit函数,或从main函数返回),则所有带未写缓冲数据的标准I/O流都会被冲洗,所有打开的标准I/O溜溜都会被关闭。

  • 相关阅读:
    动态规划解按摩师的最长预约时间
    C#中WinForm的Tab键顺序调整顺序
    内网穿透工具对比FRP+NPS+Zerotier与NAT服务器测试
    " " 和 ' ' 混用拼接html字符串,且含有事件,事件中有参数
    HAProxy在Windows下实现负载均衡与反向代理
    react 导入src外部的文件 Relative imports outside of src/ are not supported.
    11_实例
    C#删除指定目录下文件(保留指定几天前的日志文件)
    【转】系统创建定时执行任务bat批处理删除指定N天前文件夹的文件
    mariadb导如数据异常------Error Code: 1153
  • 原文地址:https://www.cnblogs.com/shaoguangleo/p/2805981.html
Copyright © 2011-2022 走看看