标准I/O


标准IO:读/写有缓冲区的


标准IO对象  -> 普通文件,例如: 访问1.txt,2.jpg,3.mp3..

 

标准I/O实例:

#include <stdio.h>


int main()
{

    //以读写方式打开文件,如果文件不存在则创建,如果存在则清空内容,文件指针定位开头
	FILE *fp = fopen("1.txt","w+");
	if(fp == NULL) 
		printf("fopen error!\n");

    //写入helloworld到1.txt文件里
	char buf[10] = "helloworld";
	fwrite(buf,10,1,fp);

    //从1.txt文件里读取5个字节的数据出来
	fseek(fp,0,SEEK_SET);   //文件指针定位开头
	char t[5];
	fread(t,5,1,fp);
	printf("t = %s",t);    //输出hello

    //关闭文件
	fclose(fp);
	return 0;
}

头文件:

#include <stdio.h>

 

函数原型:

//打开 / 关闭
FILE *fopen(const char *path, const char *mode);  

int fclose(FILE *fp);           


//读 / 写
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);  


//文件定位指针
int fseek(FILE * stream, long  offset, int whence);    

//获取当前文件指针距离开头的绝对值
long ftell(FILE *stream);

//重置文件指针的定位到开头 
void rewind(FILE *stream);   



//--------------------- 下面文件字符、字符串函数 ----------------------------

int getchar(void);

int getc(FILE *stream);

int putc(int c, FILE *stream);



char *gets(char *s);	//危险,不推荐用

int puts(const char *s);



int fgetc(FILE *stream);

int fputc(int c, FILE *stream);



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

int fputs(const char *s, FILE *stream);
 

 

函数参数详解:

//--------------------------------  打开/关闭  ----------------------------

FILE *fopen(const char *path, const char *mode);

	path: 需要访问的文件的路径
	mode: 操作文件的权限

	文件权限:
	r:	//以只读方式打开文件,文件的定位在文件的开头!  

	r+:	//以读写方式打开文件,文件的定位在文件的开头!

	w:	//以只写方式打开文件,如果文件不存在则创建,存放则清空,文件的定位在文件开头

	w+:	//以读写方式打开文件,如果文件不存在则创建,存放则清空,文件的定位在文件开头

	a:	//以只写方式打开文件,以追加方式写入文件,文件不存在则创建,文件的定位文件的末尾。

	a+:	//以读写方式打开文件,以追加方式写入文件,不存在则创建,如果是读操作,则从文件定位	            
        //在文件开头,如果是写操作,则文件的定位在末尾。

     	返回值:
		成功:文件指针
		失败:NULL


int fclose(FILE *fp);

    fp: 需要关闭的文件流指针

    返回值:
	成功:0
	失败:EOF





//---------------------------------  读/写: --------------------------------
     
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

   ptr:数据缓冲区
   size: 每一个块的字节数
   nmemb: 读取的块数
   stream:文件流指针

  返回值:
    成功: 已经读取到的块数。
    失败: 0

文件: 30		 24                 28
   3  10   -> 3      3      10  -> 2      3   10 -> 2
   2  15   -> 2      2      15  -> 1      2   15 -> 1
   5  10   -> 3      5      10  -> 2      5   10 -> 2
		  (数量)(块)



size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);

   ptr:数据缓冲区
   size: 每一个块的字节数
   nmemb: 写入的块数
   stream:文件流指针

   返回值:
    成功: 已经写入的块数。
    失败: 0



//---------------------------------  文件指针操作 --------------------------------

//文件指针定位函数:
int fseek(FILE * stream, long  offset, int whence);
  
 	stream: 需要进行偏移的文件指针
	offset: 需要偏移的偏移量
	whence: 基准点
		SEEK_SET  -> 文件开头
	        SEEK_CUR  -> 文件当前位置
		SEEK_END  -> 文件末尾

   返回值:
	成功:0
	失败:-1


//获取当前文件指针距离开头的绝对值
long ftell(FILE *stream);

	stream:需要获取当前位置距离开头的字节数的文件指针
	
  返回值:
	成功: 距离开头的偏移量
	失败: -1



//重置文件指针的定位到开头
  void rewind(FILE *stream);

	stream: 文件指针

  返回值:无!



//---------------------------------  处理文件字符、字符串函数 -----------------------------

int getchar(void);

//从标准输入(stdin)里读取一个字符并将返回值unsigned char转换为int




int getc(FILE *stream);

//相当于fgetc()


int putc(int c, FILE *stream);

//相当于fputc()




int fgetc(FILE *stream);

//从流中读取一个字符并将返回值unsigned char转换为int,或文件结尾或错误的EOF。


int fputc(int c, FILE *stream);

//将c强制转换成无符号字符型再写入流中




char *gets(char *s);	//危险,不推荐用	


int puts(const char *s);

//将s写入到标准输出(stdout)里面




char *fgets(char *s, int size, FILE *stream);
	
//从流中读取size大小数据放进s里面。



int fputs(const char *s, FILE *stream);

//将字符串s写入流中

 

 

最后再补充一个printf的知识

printf()内容输出的条件:
1. 程序退出
2. 遇到\n
3. 缓冲区满了
4. 主动使用fflush刷新缓冲区
5. 使用fprintf()修改输出对象
6. 再次调用IO函数刷新缓冲区

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值