标准IO和文件IO

本文介绍了标准IO和文件IO的区别与使用,标准IO通过FILE结构体提供缓冲机制,文件IO遵循POSIX标准使用文件描述符。内容包括错误处理、fopen/fclose、fgetc/fputc、fgets/fputs、fwrite/fread的使用,以及流的刷新和定位、格式化输出、open/close、write/read、访问目录、修改文件权限和获取文件属性等操作。
摘要由CSDN通过智能技术生成

标准IO通过FILE结构体专门用于访问普通文件,通过缓冲机制减少系统调用,实现更高的效率。而文件IO使用文件描述符来访问文件,遵循posix(可移植操作系统接口规范)标准,标准IO是在文件IO之上封装了一个缓冲机制,更上层。

错误处理

#include <errno.h>
extern errno; //错误号
char *strerror(int error);//根据错误号返回对应的错误信息
printf("fopen:%s\n",strerror(errno));
#include <stdio.h>
void perror(const char *s);//先输出字符串再输出错误信息

在我们进行程序开发的时候perror函数能为我们提供错误信息,使用起来非常方便。

fopen、fclose

打开或者关闭流

#include <stdio.h>
FILE *fopen(const char *path, const char *mode);
int fclose(FILE *stream);//流关闭时自动刷新缓冲区的数据并释放缓冲区

mode:
r:打开文件,进行读取。
w:创建文件,以进行写入。如果文件已经存在,则删除当前内容。
a:追加,打开或创建文件以在文件尾部写入。
r+: 打开文件以进行更新(读取和写入)。
w+:创建文件以进行更新。如果文件已经存在,则删除当前内容。
a+:追加,打开或者创建文件以进行更新,在文件尾部写入。
使用示例1:

#include <stdio.h>
int main(void)
{
   
	FILE *fp;
	if((fp = fopen("test.txt","r")) == NULL){
   
		perror("fopen");return -1;
	}
	fclose(fp);
	return 0;
}

使用示例2:

//测试打开流的最大限制,输出结果为1021
//实际上应该是1024,系统自动打开了stdin,stdout,stderr
#include <stdio.h>
int main(void)
{
   
	int count = 0;
	FILE *fp;
	while((fp = fopen("test.txt","r")) != NULL){
   
		count++;
	}
	printf("%d\n",count);
	return 0;
}

fgetc、fputc(getchar、putchar)

读写一个字符

#include <stdio.h>
int fgetc(FILE *stream);
int getc(FILE *stream);
int getchar(void);//从标准输入流中读取字符
return:读到文件末尾返回-1

int fputc(int c, FILE *stream);
int putc(int c, FILE *stream);
int putchar(int c);
putchar(c) = fputc(c,stdout);//putchar('a') = fputc('a',stdout);

fgets、fputs(gets、puts)

读写一行

#include <stdio.h>
char *fgets(char *s, int size, FILE *stream);
char *gets(char *s);//容易导致溢出,一般不用
int fputs(const char *s, FILE *stream);
int puts(const char *s);

fwrite、fread

读写若干个对象

#include <stdio.h>
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);
size:单个对象大小  nmemb:读写对象数量

使用示例1:

//实现文件的复制
//可以使用命令diff -ruN test.txt1 test.txt2 查看两个文件是否相同
#include <stdio.h>
int main(int argc,const char *argv
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

~Eliauk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值