第二周学习文档 Linux C 文件操作

一 先用送外卖故事看懂

假设你是外卖店店员,桌上有一本订单本 orders.txt。C 程序就是店员,文件就是订单本。

fopen 把订单本拿出来并打开。

fprintf 把菜名和数量写进订单本。

fgets 一行一行地查看订单。

fclose 用完后合上订单本并放回去。

整个流程只有六步:

Open -> Write -> Close -> Reopen -> Read -> Close

二 本周需要达成的结果

  1. 知道 FILE *fp 是程序和文件之间的联系。

  2. 会用 r、w、a 三种模式打开文件。

  3. 会写入、追加、逐行读取和关闭文件。

  4. 会用 gcc 在 Ubuntu 中

  5. 会交叉编译,并在 i.MX6ULL 开发板上运行。

本周时间预算

  • 看懂故事和核心函数:约 1 小时。
  • 跟着敲小练习:约 1.5 小时。
  • 完成订单程序:约 1.5 小时。
  • 交叉编译和开发板验证:约 1 小时。

总计约 5 小时 ,可以在一周内自由分配,不按天限制。

三 只需掌握的核心知识

1 FILE 指针

FILE *fp;

fp 可以理解为你手中的订单本把手。后面的读和写都要通过它找到文件。

2 fopen 打开文件

fp = fopen("orders.txt", "a");

orders.txt 是文件名,a 是打开方式。

3 r w a 三种模式

r read 只看以前的订单。文件不存在就失败。

w write 重新拿一本空订单本。原内容会被清空。

a append 翻到最后一页追加新订单。原内容保留。

记忆: r 是看,w 是重写,a 是追加。

停下来想一想

  • 订单本已经有五条订单,想加第六条,应该选 w 还是 a?为什么?
  • 如果只想看订单,应该用哪种模式?

4 写入文件

fputs("Order: noodles\n", fp);
fprintf(fp, "Food: %s, Quantity:%d\n", food, quantity);

fputs 适合写固定文字;fprintf 适合把变量写进文件。

5 读取文件

while (fgets(text, sizeof(text), fp) != NULL)
{
printf("%s", text);
}

fgets 每次读一行。while 让它继续读,直到文件末尾。

6 fclose 关闭文件

fclose(fp);

就像用完订单本要放回去。写完不关闭,数据可能没有完整保存。

7 打开失败必须处理

if (fp == NULL)
{
printf("File open failed.\n");
return 1;
}

NULL 表示订单本没有成功打开。此时应停止程序,不能继续读写。

四 先做一个最小练习

这个练习完成四件事:创建文件、写入一行、重新打开、读出一行。

复制代码
#include <stdio.h>

int main(void)
{
    FILE *fp;
    char text[100];

    fp = fopen("order.txt", "w");
    if (fp == NULL)
    {
        printf("File open failed.\n");
        return 1;
    }

    fputs("Order: beef noodles\n", fp);
    fclose(fp);

    fp = fopen("order.txt", "r");
    if (fp == NULL)
    {
        printf("File open failed.\n");
        return 1;
    }

    fgets(text, sizeof(text), fp);
    printf("%s", text);
    fclose(fp);

    return 0;
}

Ubuntu 中运行

gcc file_basic.c -o file_basic
./file_basic
cat order.txt

预期看到:

Order: beef noodles

这个练习的重点

  • 第一次 fopen 用 w,负责创建并写入。
  • 写完先 fclose,再用 r 重新打开。
  • fgets 读一行,printf 把这一行显示到终端。

不看代码回顾

  • 为什么写完后要先 fclose,再用 r 重新打开?
  • fgets 一次读多少内容?
  • 如果 fopen 返回 NULL,程序还能继续读写吗?
相关推荐
wangqiaowq8 小时前
Ontology 学习 二
学习
该学习了咕咕14 小时前
顶刊论文学习笔记
学习
曦樂~15 小时前
Cpp面筋
c语言·c++
Linux-lucky16 小时前
45-Linux学习之旅之防火墙与WEB加固
linux·前端·网络·学习·ubuntu
li星野16 小时前
【学习记录】k-Wave 时间步长、CFL 稳定性与参数实验全解析
学习
禁默16 小时前
启元 Q1 二次开发实践:Ubuntu 部署与仿真验证,从 PrimeConsole 到 ROS 2 Humble + RViz
linux·运维·ubuntu
skywalk816317 小时前
把 去也网站 从 Ubuntu 搬到 FreeBSD:一次 Service Jail + nginx 的部署实录
linux·运维·nginx·ubuntu·freebsd
心祭丫丫19 小时前
【每天一个 Python 小案例17】Python 实现通讯录
开发语言·人工智能·笔记·python·学习
爱莉希雅&&&19 小时前
GitLab 完整学习笔记
linux·运维·服务器
风笙97819 小时前
[文件系统]文件系统挂载与卸载详解
linux