嵌入式C进阶笔记 ---标准IO

 

一、什么是文件?

1.概念:文件是一组相关数据的有序集合。

2.文件类型

 

  • 常规文件 r
  • 目录文件 d
  • 字符设备文件 c
  • 块设备文件 b
  • 管道文件 p
  • 套接字文件 s
  • 符号链接文件 l

 

3.按照数据的组织格式又分为文本文件和二进制文件。

 

二、流

1.就C程序而言,所有的IO操作只是简单地从程序移进或者移出字节,这种字节流便被称为流(stream)。我简单的把流当做 数据从源文件到目标文件的过程机制。

2.在C语言中流分为两种类型:文本流(text stream)和二进制流(binary stream)

文本流流中的每一个字符对应一个字节,用于存放对应的ASCII码值,因此文本流中的数据可以显示和打印出来,都是用户可以读懂的信息。

二进制流二进制流中的字节将完全根据程序编写它们的形式写入到文件或者设备中,而且完全根据它们从文件或者设备读取的形式读入到程序中

 

3.流的缓冲类型分为全缓冲、行缓冲、无缓冲三种,其中当IO和一个终端关联时,典型的行缓冲。

4.标准IO预定义了三个流,程序运行自动打开

 

5.流和文件的区别

要说文件是数据的有序集合,存放数据的地方。那么我认为,流便是把数据从源中抽离出来,文件的管理机制。流操作函数操作的不是文件描述符,而是流缓冲区。

参考链接:https://blog.csdn.net/u011000290/article/details/48940371

 

三、标准IO

标准I/O是ANSI C建立的一个标准I/O模型,是一个标准函数包和stdio.h头文件中的定义,具有一定的可移植性。

标准IO提供API函数对文件进行一系列的操作。

标准IO通过缓冲机制减少系统调用,来实现更高的效率。

 

FILE结构体

 

  • FILE结构体是用来存放文件名、文件状态、位置等信息的。
  • 标准I/O的所有操作都是围绕FILE来进行

 

标准IO对对文件进行操作

 

复制一个文件

#include <stdio.h>

int main(int argc,  char *argv[])
{
   FILE *fps, *fpd;
   int ch;
   
   if (argc < 3) {
      printf("Usage : %s <src_file> <dst_file>\n", argv[0]);
	  return -1;
   }
 
   if ((fps = fopen(argv[1], "r")) == NULL) {
       perror("fopen");
	   return -1;
   }
   
   if ((fpd = fopen(argv[2], "w")) == NULL) {
       perror("fopen");
	   return -1;
   }
   
   while ((ch = fgetc(fps)) != EOF) {
      fputc(ch, fpd);
   }
   fclose(fps);
   fclose(fpd);

   return  0;
 }

 

四、相关函数

 

 

FILE *fopen (const char *path, const char *mode);     打开一个标准IO流,成功返回流指针,错误返回NULL
int fclose(FILE *stream);							关闭流,成功返回0,错误返回EOF
fgetc()/fputc()                                        一次读/写一个字符
fgets()和fputs()                                        一次读/写一行
fread()/fwrite()                                         每次读/写若干个对象,而每个对象具有相同的长度

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

hinzer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值