标准IO的函数接口

发布于:2024-10-17 ⋅ 阅读:(10) ⋅ 点赞:(0)
  1. 标准IO的函数接口
1. 打开文件,关闭文件(fopen,fclose)
2./写一个字符(fgetc   fputc)
3./写一个字符串(fgets   fputs)
4./写一个二进制文件(fread fwrite)
5. 移动指针(fseek)

fopen 打开文件

头文件
#include <stdio.h>
FILE *fopen(const char *pathname, const char *mode);
功能:打开一个文件
参数:参数:path:打开的文件的路径
      mode:打开方式
r:只读,文件指针定位到文件开头(有文件)
r+:可读可写,文件指针定位到文件开头(有文件)
w:只写,文件不存在创建,存在清空,文件指针定位到文件开头
w+:可读可写,文件不存在创建,存在清空,文件指针定位到文件开头
a: 只写,文件不存在创建,存在追加(到文件末尾)
a+:可读可写,文件不存在创建,存在追加(到文件末尾)
读文件指针定位到文件开头。
返回值:成功返回文件流指针
        失败返回NULL,并且设置错误码    

示例代码

问:一个任务找中,最多打开多少个文件?一个文件能不能重复的被打开(可)

运行结果:

最多打开1021+3个文件(1024)

注意:打开文件的个数属于有限资源,所以用完这个文件后记得及时关闭。

fclose 关闭文件

int fclose(FILE *stream);
功能:关闭文件
参数:
stream:流指针
返回值:成功0,失败-1,更新errno
用法:fclose(fp);

perror

#include <stdio.h>
#include <errno.h>

void perror(const char *s);
功能:根据errno的值获取错误信息,将信息输出到终端
参数:s:提示信息
返回值:成功0失败-1

fgetc 读一个字符

int fgetc(FILE *stream);
 功能:从文件中读一个字符
 参数:
    stream:流指针(从那个文件读)
返回值:成功返回读到字符的ascii值,失败返回或读到文件结尾返回-1.

示例代码:

fputc 写单个字符

#include <stdio.h>

int fputc(int c, FILE *stream);
功能:向指定文件中写入一个字符
参数:c:要写入字符的ASCII值
	stream:流指针
返回值:写入字符ASCII值
	   失败返回:EOF

练习:用fputc和fgetc实现cp功能,将文件A中的内容放到文件B中

fgets 获取字符串

char *fgets(char *s, int size, FILE *stream);
功能:从文件中获取指定长度的字符串
参数: s:字符串存放的首地址
	 size:期望获取字符的个数   
	         实际读size-1个字符,会自动补'\0',预留一个位置补'\0'.
             文件中不满size-1个,有多少读多少,都会补'\0'.
             当读到'\n',结束,不再读下一行内容,再次调用fgets继续从下一行开始读。
           
	 stream:文件流指针
返回值:
	成功:返回获取成功字符串存放的首地址
	失败或读到文件结尾返回NULL。

示例代码

fputs 输入字符串

int fputs(const char *s, FILE *stream);
   功能:向指定文件中输入一串字符
   参数:
         s:输入字符串的首地址
		 stream:文件流指针
	返回值:成功返回输出字符个数
	失败返回EOF

fprintf

#include<stdio.h>
 int fprintf(FILE *stream, const char *format, ...);
功能:向指定的文件以指定的格式写入数据
参数: stream :流指针
	    format:指定格式
		...:多个参数
	返回值:输出字符个数
	 失败返回:EOF
用法:
fprintf(fp, "hello world\n");

练习:用fgets实现wc –l的功能,文件名从命令行输入

fread,fwrite

 #include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
功能:以指定类型从文件中读取内容
参数: ptr:读内容存放的首地址
       size:读一个元素内容的字节大小
       nmemb:读元素的个数
       stream:(文件)
返回值:成功:元素个数,读到文件结尾0.
     失败:-1


size_t fwrite(const void *ptr, size_t size, size_t nmemb,
                     FILE *stream);
功能:以指定类型向文件中写内容
参数:
   ptr:写内容存放的首地址
    size:写一个元素内容的字节大小
    nmemb:写元素的个数
    stream:(文件)
返回值:成功:写元素个数.
     失败:-1

示例代码:将一个int类型的数组写到文件中保存起来,并且读出来

文件指针偏移函数

rewind
	     void rewind(FILE *stream);
         功能:将文件指针定位到文件开头

ftell
	    long ftell(FILE *stream);
		功能:计算文件指针当前的位置(相对于文件开头)
		返回值:成功:文件指针的位置
		        失败:-1,更新errno
fseek
       	int fseek(FILE *stream, long offset, int whence);
		功能:将文件指针偏移到指定位置
		参数:
		    stream:流指针
			offset:偏移量   +5 --》相对于位置向后偏移5byte
			                 -5 --》相对于位置向前偏移5byte
			whence:相对位置
			   SEEK_SET:开头
			   SEEK_CUR:当前
			   SEEK_END:结尾
		返回值:成功:0
		    失败:-1,更新errno
用法:
fseek(fp,+5,SEEK_SET