下面三个函数打开一个标准I/O流
#include <stdio.h>
FILE* fopen(const char* restrict filename, const char* restrict type);
FILE* freopen(const char* restrict filename, const char* restrict type, FILE* restrict fp);
FILE* fdopen(int filedes, char* type);
#成功返回文件指针,出错,返回NULL
type参数指定对该I/O流的读写方式,ISO C规定type参数可以有15中不同的值,如下:
关于这个表格有两点说明:
当以读和写类型打开一个文件时,具有下面的限制:
- 如果中间没有fflush,fseek,fsetpos或者rewind,则在输出的后面不能直接跟随输入
- 如果中间没有fseek,fsetpos或者rewind,或者一个输入操作没有到达文件尾端,再在输入操作之后不能直接跟随输出。
- 在指定w和a类型创建一个新文件时,需要使用如下的权限位集来创建文件:
S_IRUSR | S_IWUSR | S_IPGRP | S_IWGRP | S_IROTH | S_IWOTH
1.fopen函数
FILE *fopen(const char *filename, const char *type)打开一个路径名为filename的指定文件
- filename -- 这是 C 字符串,包含了要打开的文件名称。
- type-- 这是 C 字符串,包含了文件访问模式
TIP:fopen和open的不同:
- open属于低级IO,fopen是高级IO。
- open返回一个文件描述符,fopen返回一个文件指针。
- open无缓冲,fopen有缓冲。
- open与 read, write 等配合使用, fopen与 fread, fwrite等配合使用。
- fopen是在前者的基础上扩充而来的,在大多数情况下,用fopen。
- fopen() 是 C 标准库中的函数,而 open() 是 Linux 中的系统调用函数。
2.freopen函数
#include<stdio.h>
int main()
{
freopen("in.txt","r",stdin);//输入重定向,输入数据将从in.txt文件中读取
freopen("out.txt","w",stdout);//输出重定向,输出的数据保存在out.txt中
int a,b;
scanf("%d %d",&a,&b);
printf("%d\n",a+b);
fclose(stdin);
fclose(stdout);
return 0;
}
其中in.txt中我们设定的内容为“2 6”,输出结果为8.
调用fclose关闭打开的流。
上内容来源于网络,仅作本人学习笔记使用,关于本书请参考APUE。