标准IO中函数的学习

1、打开流

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

************************************************************************************
#include <stdio.h>
FILE *fopen(const char * p a t h n a m e, const char *t y p e) ;
FILE *freopen(const char * p a t h n a m e, const char *t y p e, FILE *f p) ;
FILE *fdopen(int f i l e d e s, const char *t y p e) ;
三个函数的返回:若成功则为文件指针,若出错则为N U L L

********************************************************************************************
这三个函数的区别是:
(1) fopen打开路径名由pathname 指示的一个文件。
(2) freopen在一个特定的流上(由f p指示)打开一个指定的文件(其路径名由pathname 指示),
如若该流已经打开,则先关闭该流。此函数一般用于将一个指定的文件打开为一个预定义的流:
标准输入、标准输出或标准出错。
(3) fdopen取一个现存的文件描述符(我们可能从o p e n , d u p , d u p 2 , f c n t l或p i p e函数得到此文
件描述符),并使一个标准的I / O流与该描述符相结合。此函数常用于由创建管道和网络通信通
道函数获得的插述符。因为这些特殊类型的文件不能用标准I/O fopen函数打开,首先必须先调
用设备专用函数以获得一个文件描述符,然后用f d o p e n使一个标准I / O流与该描述符相结合。

打开标准IO流的MOde参数:

r或rb以只读方式打开,该文件必须存在
r+或rb+以读写方式打开,该文件必须存在
w或wb以只读方式打开,如何文件不存在,则创建,如果文件存在,文件长度清0
w+或wb+以读写方式打开文件,如何文件不存在,则创建文件;如果文件存在,文件长度清0
a或ab以追加的方式打开可读可写文件,如果文件不存在,则创建文件;如何文件存在,写入的数据会追加到文件的末尾,源文件的内容会保留;
a+或ab+以追加的方式打开可读可写文件,如果文件不存在,则创建文件;如果文件存在,写入的数据会追加到文件的末尾,原文件会被保留

* 当给定b参数时,表示以二进制的方式打开文件;

下面的例子会对打开流有深入的认识:

#include <stdio.h>
#include <string.h>
#include <errno.h>
#define N 0
int main(int argc,char *argv[])
{

	FILE *fp;
   if(argc < 2)
   {
	   fprintf(stdout,"usage:%s filename\n",argv[0]);
	   return -1;
   }
   if((fp = fopen(argv[1],"r+")) == NULL)
   {
	   perror("fopen");
	   return -1;
   }
   printf("before freopen\n");
   //将标准输出重定向到argv[1]文件中;
   freopen(argv[1],"w",stdout);
   printf("after freopen\n");//这句不会在屏幕上输出;而被输出到文件中
   //将标准输出重定向到 /dev/tty (显示器)上;
   freopen("/dev/tty","w",stdout);
   //屏幕打印出下面的语句
   printf("end main\n");

#if N
	if(fp = fopen("./hello","r+") == NULL)
	{
		fprintf(stderr,"fopen()adadadadad %s\n",strerror(errno));
		return -1;
	}

	fclose(fp);
#endif
	return 0;
}
#include <stdio.h>
//从文件1.c中有效读入2个整数,并讲结果输出到out.c中,屏幕上不会输出2个的和;
int main()
{
	//将标准输入重定向到1.c文件
	freopen("./1.c","r",stdin);
	//将并准输出重定向到out.c文件中
	freopen("./out.c","w",stdout);
	int a,b;
	while(scanf("%d%d",&a,&b) != EOF)
		printf("%d\n",a+b);
	fclose(stdin);
	fclose(stdout);
	return 0;
}


标准IO库 fclose()

*******************************************************************************************************

int fclose(FILE * stream)

调用成功则返回0,失败则返回EOF,并设置ERRNO;

*******************************************************************************************************

在该文件关闭前刷新缓存中的数据;

标准IO库,读写流---字符IO输入输出

1)以下三个函数可用于一次读一个字符:

***********************************************************************

int getc(FILE * stream)
int fgetc(FILE *stream)
int getchar(void)
函数成功则返回一个字符;若已处于文件的结尾或者出错返回EOF
***************************************************************
*函数getchar()等同于 getc(stdin);
*getc的实现是一个宏,而fgetc则是一个函数
2)以下三个函数可用于一次输出一个字符
*************************************************************
int putc (int c,FILE * stream);
int fputc(int c.FILR * stream);
int putchar(void);
返回值为一个无符号字符转换为int;失败则返回EOF
**************************************************************
具体例子
#include <stdio.h>
#include <stdlib.h>

int main()
{
	while(1)
	{
		putchar(getchar());
	}
	return 0;
}

 


标准IO库,读写流 -----行IO的输入输出

******************************************************************

char * gets(char *s);

char * fgets(char *s,int size ,FILE *stream);

成功返回为BUF,文件结尾或者失败则返回NULL

***********************************************************************************************

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值