C primer plus 学习笔记 第13章 文件输入/输出

简介: C primer plus 学习笔记 第13章 文件输入/输出

第13章 文件输入\输出

13.1 与文件进行通信

13.1.1 文件是什么

C把文件看作是一系列连续的字节。C提供两种文件模式:文本模式和二进制模式。

13.1.2 文本模式和二进制模式

13.1.3 I/O的级别

13.1.4 标准文件

C程序会自动打开3个文件:标准输入,标准输出和标准错误输出。

 

13.2 标准I/O

/*count.c */
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>  //提供exit()函数
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)
  {
    printf("Can't open %s\n", argv[1]);
    exit(EXIT_FAILURE);
  }
  while ((ch = getc(fp)) != EOF)
  {
    putc(ch, stdout);
    count++;
  }
  fclose(fp);
  printf("\nFile %s has %lu characters\n", argv[1], count);
 
  return 0;
 
}


13.2.1 检查命令行参数

13.2.2 fopen()函数  程序使用fopen()函数打开文件,(函数声明在stdio.h)。

fopen()的第一个参数是待打开文件的名称,第2个参数是一个字符串,指定打开文件的模式(见f表open()的模式字符串)。

fopen()的返回值是一个文件指针(file pointer),文件指针的类型是指向FILE的指针(FILE定义在stdio.h中)

13.2.3 getc()和putc()函数

类似与getchar(),但getc()是从文件中获取一个字符。

ch = getc(fp); //fp是FILE类型的指针。

putc()是将字符放在指针指向的文件中:

putc(ch, fp);

13.2.4 文件结尾

如果getc()读取字符数发现它是文件结尾,它会返回一个值“EOF"。

13.2.5 fclose()函数

fclose(fp)函数关闭fp指定的文件。

成功关闭时返回0,否则返回EOF。借此可以检测文件是否成功关闭:

if (fclose(fp)!=0)

 printf("Error in closeing file \n");

13.2.6 指向标准文件的指针

13.3 一个简单的文件压缩程序

(将某个文本文件的内容”压缩“,压缩方法是每3个字符只保留第一个,剩下两个丢弃)

//reducto.c
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 40
int main(int argc, char * argv[])
{
  FILE * in, *out;
  int ch;
  char name[LEN];
  int count = 0;
 
  if (argc < 2)
  {
    fprintf(stderr, "Usage: %s filename\n", argv[0]);
    exit(EXIT_FAILURE);
  }
  //设置输入
  if ((in = fopen(argv[1], "r")) == NULL)
  {
    fprintf(stderr, "I couldn't open the file \"%s\"\n ", argv[1]);
    exit(EXIT_FAILURE);
  }
  //设置输出
  strncpy(name, argv[1], LEN - 5); // 拷贝文件名
  name[LEN - 5] = '\0';
  strcat(name, ".red");
  if ((out = fopen(name, "w")) == NULL)
  {
    fprintf(stderr, "Can't create output file.\n");
    exit(3);
  }
  //拷贝数据
  while ( (ch=getc(in))!=EOF)
  {
    if (count++ % 3 == 0)
      putc(ch, out);
  }
  if (fclose(in) != 0 || fclose(out) != 0)
    fprintf(stderr, "Error in closing files.\n");
 
  return 0;
}

13.4 文件I/O:fprintf()、fscanf()、fgets()、fputs()

/*addaword.c --fprintf() fscanf() rewind()*/
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAX 41
 
int main(void)
{
  FILE *fp;
  char words[MAX];
  if ((fp = fopen("wordy", "a+")) == NULL)
  {
    fprintf(stdout, "Can't open \"wordy\" file.\n");
    exit(EXIT_FAILURE);
  }
  puts("Enter words to add to the file; press the #");
  puts("key at the beginning of a line to terminate.");
  while ((fscanf(stdin, "%40s", words) == 1) && (words[0] != '#'))
    fprintf(fp, "%s\n", words);
  puts("File contents:");
  rewind(fp);//回到文件开始处。
  while (fscanf(fp, "%s", words) == 1)
    puts(words);
  puts("Done!");
  if (fclose(fp) != 0)
    fprintf(stderr, "Error closing file\n");
 
  return 0;
}

13.4.1 fprintf()和fscanf()函数

13.4.2 fgets()和fputs()函数

 

13.5 随机访问:fseek()和ftell()

有了fseek()函数,便可把文件看作时数组,移动到文件的任意字节处。ftell()函数返回一个long类型的值,表示文件中的当前位置。

 

13.6 标准I/O 的机理

13.7 其他标准I/O函数

相关文章
|
5天前
|
存储 弹性计算 缓存
阿里云服务器租赁费用:新版租赁收费标准及活动报价参考
本文更新了2026年阿里云全系列云服务器租赁活动报价,所有特惠资源均可前往阿里云活动中心选购,整体覆盖从个人入门到企业级高性能场景的全梯度需求。其中轻量应用服务器主打极致性价比,2核2G峰值200M带宽配置每日10点、15点限时抢购价仅38元/年,2核4G配置379元/年起;高性价比的经济型e实例、通用算力型u2i实例覆盖2核4G至4核32G全档位,适配开发测试与中小型企业业务;搭载英特尔至强6处理器的第九代c9i企业级实例算力较上代提升20%,支撑高并发生产环境,不同实例规格价差清晰,用户可根据自身业务负载与预算灵活选型。
1560 110
|
12天前
|
云安全 人工智能 运维
阿里云联动百位企业安全专家,共识Agent防御最佳实践
当Agent成为新员工,你的安全边界在哪里?
1939 8
阿里云联动百位企业安全专家,共识Agent防御最佳实践
|
6天前
|
人工智能 程序员 API
Codex 接入 DeepSeek-V4-Flash:还能补上识图,提供两套方案
Codex 接入 DeepSeek-V4-Flash 怎么配?本文覆盖 CLI 与桌面端,再用 qwen3-vl-flash 补识图,两套方案可直接照做
|
5天前
|
编解码 人工智能 安全
2核4G/4核8G/8核16G阿里云服务器如何选择实例?经济型e、通用算力型u2i与计算型c9i选哪个?
本文介绍了阿里云2核4G、4核8G、8核16G三档主流配置下经济型e、通用算力型u2i和计算型c9i三种实例的最新活动价格与适用场景。同配置下三者价差显著,以2核4G为例,经济型e低至599.93元/年,计算型c9i则高达1742.08元/年。文章详细解析了各实例的性能定位:经济型e适合轻负载入门场景,u2i兼顾稳定算力与性价比,c9i凭借第9代至强处理器与芯片级安全能力支撑高性能业务。同时提示用户可叠加满减优惠券享受折上折,建议根据业务负载与预算综合决策。
526 112
|
18天前
|
人工智能 前端开发 Linux
Codex 桌面版安装 + CC Switch 接入第三方 API 完整教程(2026 最新)
2026最新教程:手把手教你安装Codex桌面版,通过CC Switch v3.17.0一键接入Fenno等国产API(兼容OpenAI Responses格式),跳过账号登录,完整启用代码审查、多步任务与上下文感知功能。零基础友好,全程图文实操。(239字)
2529 4
|
10天前
|
存储 人工智能 关系型数据库
阿里云AI产品与云产品最新组合套餐:Token Plan、AI coding及云服务器和建站等组合优惠价
阿里云推出全新“算力+模型+应用”一站式云与AI组合套餐活动,覆盖从个人开发者到中大型企业的全场景需求。核心亮点为分三档定价的Token Plan订阅服务,支持Qwen3.8-Max-Preview大模型调用,错峰时段最低可享0.2折优惠。活动同步推出AI Coding、智能体部署、云电脑托管、0代码建站等十余类场景化组合,搭配99元/年的普惠云服务器、88元/年的入门数据库等经典特惠产品,还为企业提供1V1定制化AI转型方案,大幅降低了不同用户群体拥抱AI的技术门槛与采购成本。
719 111
|
20天前
|
人工智能 JSON 安全
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
阿里云AI安全产品联动防御Fastjson攻击
2632 13
Fastjson远程代码执行漏洞,阿里云AI安全为您保驾护航
|
6天前
|
人工智能 JSON Shell
2026AI漫剧本地全开源方案(附各个软件模型链接),8G显卡也能流畅运行
这是一套完全本地化部署的AI漫剧生成技术链路:涵盖LLM剧本分镜生成、FLUX文生图(IP-Adapter人脸锁定)、StoryDiffusion时序连贯控制、LTX-2.3唇形同步视频生成,及ComfyUI全流程调度。零云端费用,仅耗硬件算力,单集2–4小时可产出竖屏短视频,适配抖音/B站分发。
|
7天前
Qoder 一周年 × Qwen3.8-Max 正式上线,多重好礼限时领
8月3日,Qwen3.8-Max 正式上线Qoder,迎来Qoder一周年。新老用户可领800次免费调用,下单再赠2000次;夜间(22:00–08:00)调用5折;邀请好友双方得积分与调用额度。
438 1