打开流

来源:互联网 发布:ins是什么社交软件 编辑:程序博客网 时间:2024/04/30 11:17

下列3个函数可以用来打开一个标准I/O流

#include <stdio.h>FILE *fopen(const char *restrict pathname, const char *restrict type);FILE *freopen(const char *restrict pathname, const char *restrict type, FILE *restrict fp);FILE *fdopen(int fd, const char type);                                                                     3个函数的返回值:若成功,返回文件指针;若出错,返回NULL
这三个函数的区别如下:

(1)fopen函数打开路径名为pathname的一个指定的文件。

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

(3)fdopen函数去一个已有的文件描述符(可能从open dup dup2 fcntl pipe socket socketpair accept),并使用一个标准的I/O流与该描述符相结合。西函数常用于创建管道和网络通信函数返回的描述符。因为这些特殊类型的文件不能用标准I/O函数fopen打开,所以我们必须先调用设备专用函数一伙的一个文件描述符,然后用fdopen使一个标准I/O流与该描述符相结合。

type参数指定对该I/O流的读,写方式,type参数可以有15种不同的值。

type说明open标志r或rb为读打开O_RDONLYw或wb把文件截断至0长,或为写而创建O_WRONLY|O_CREAT|O_TRUNCa或ab追加,为在文件尾写而打开,或为写而创建O_WRONLY|O_CREAT|O_APPENDr+或r+b或rb+为读和写而打开O_RDWRw+或w+b或wb+把文件截断至0长,或为读和写而打开O_RDWR|O_CREAT|O_TRUNCa+或a+b或ab+为在文件尾读和写而打开或创建O_RDWR|O_CREAT|O_APPEND
使用字符b作为type的一部分,这使得标准I/O系统可以区分文本和二进制文件。因为UNIX并不对这两种文件进行区分,所以在UNIX系统环境下指定字符b作为type的一部分实际上并无作用。

当以读或写打开一个文件时,具有下列限制。

若果中间没有fflush fseek fsetpos rewind,则在输出的后面不能直接跟随输入。

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

限制RWar+w+a+文件必须已存在
放弃文件以前的内容*

* *

* 流可以读
流可以写
流只可在尾端处写*


*

*
**
*
*
*
*
*
*

除非流引用终端设备,否则按系统默认,流被打开时是全缓冲的。若流引用终端设备,则流是行缓冲的。一个打开了流,那么在对该流执行任何操作之前,如果希望,则可使用setbuf或setvbuf改变缓冲的类型。

0 0
原创粉丝点击