文件

与文件进行通信

文件使用函数:

fopen();
getc();
putc();
exit();
fclose();
fprintf();
fscanf();
fgets();
fputs();
rewind();
fseek();
ftell();
fflush();
fgetpos();
fsetpos();
feof();
ferror();
ungetc();
setvbuf();
fread();
fwrite();
文件重定向:程序与文件交互的形式(程序从文件中读取信息或者把信息写入文件)
文件通常是在存储介质上一段已命名的存储区
所有文件的内容都是以二进制形式存储

C把文件看做是一系列连续的字节,每个字节都能被单独读取
C提供两种访问文件的途径:
1:文本模式:把本地环境表示的行末尾或文件结尾映射为C模式
2:二进制模式:程序可以访问文件中的每个字节

文本文件格式:使用二进制编码的字符
二进制文件格式:二进制值代表机器语言代码或者数值数据、图片、音乐编码

文本内容:包含文本内容
二进制内容:包含二进制内容

I/O级别(处理文件访问的两个级别)
1:底层I/O(low_level I/O)使用操作系统提供的基本I/O服务。
2:标准高级I/O(standard high_level I/O)使用C库的标准包和stdio.h文件头定义。

C程序会自动打开3个文件
1:标准输入standard input                系统的普通输入设备通常是键盘
2:标准输出standard output               系统的普通输出设备通常是显示屏
3:标准错误输出standard error output     系统的普通输出设备通常是显示屏
可以重定向把其他文件视为标准输入或标准输出,或标准错误输出。也可以为标准错误输出提供一个逻辑上不同的地方来发送错误信息,便于查看错误信息。

标准I/O
标准I/O的特性
1:可移植性
2:标准I/O有许多专门的函数简化处理了不同的I/O的问题
3:输入和输出都是缓冲
3A:缓冲:当文件读取文件时,一块数据(转移单位为块通常至少512字节)被拷贝到缓冲区(一块中介存储区域),缓冲极大提高了数据传输速率,程序可以检查缓冲区的字节,缓冲在后台处理,让人有种逐字符访问的错觉

//以下例子在Windows下,编译后再命令提示窗口运行该程序
int main(int argc, char *argv[])
{
    int ch;
    FILE *fp;//文件指针
    unsigned long count = 0;//计数器
    if(argc<2)//默认只有一个参数的情况下输出当前程序的文件名
    {
        printf("Usage:%s filename\n",argv[0]);
        exit(EXIT_FAILURE);
    }
    if((fp=fopen(argv[1],"r"))==NULL)//文件指针==NULL说明打开失败
    {
        printf("Can't open %s\n", argv[1]);
        exit(EXIT_FAILURE);
    }
    while((ch=getc(fp))!=EOF)//不到文件结尾就获取一个字符
    {   
        putc(ch, stdout);//输出一个字符到标准输出设备
        count++;
     }
    fclose(fp);//关闭文件
    printf("File %s has %lu characters\n", argv[1], count);//输出文件路径,字符数
    return 0;
}

//在库的宏定义
#define EXIT_SUCCESS 0
#define EXIT_FAILURE 1
#define EOF    (-1)
#define stdin  (__acrt_iob_func(0))
#define stdout (__acrt_iob_func(1))
#define stderr (__acrt_iob_func(2))

//FILE在stdio.h的定义
#ifndef _FILE_DEFINED
#define _FILE_DEFINED
typedef struct _iobuf
{
    void* _Placeholder;
} FILE;
#endif

//以下为谭浩强书内代码
typedef struct
{
	short level;//缓冲区满或者空的程度
	unsigned flags;//文件状态标志
	char fd;//文件描述符
	unsigned char hold;//如缓冲区无内容不读取字符
	short bsize;//缓冲区的大小
	unsigned char *buffer;//数据缓冲器用的位置
	unsigned char *curp;//指针当前的指向
	unsigned istemp;//临时文件指示器
	short token;//用于有效性检查
}FILEI;

在这里插入图片描述

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值