lecture15一输入输出 绳伟光 上海交通大学微纳电子学系 2017年04月28日 SHA ERS
lecture 15 —— 输入输出 绳伟光 上海交通大学微纳电子学系 2017年04月28日
简介 ■C的输入输出库是标准库中非常庞大的一部分 ■标准输入/输出函数大部分分布在头文件中 ,也包括printf,,scanf,,putchar,getchar,puts,和gets等 函数 ■内容 stream、FILE、重定向、文本文件、二进制文件 %基本文件操作函数 必格式化输入输出 ·非格式化数据读写 随机访问文件 ·字符串格式化读写 C99的宽字符输入输出函数分布在,不作介绍 3
简介 C的输入输出库是标准库中非常庞大的一部分 标准输入/输出函数大部分分布在头文件中 ,也包括printf, scanf, putchar, getchar, puts, 和gets等 函数 内容 stream、FILE、重定向、文本文件、二进制文件 基本文件操作函数 格式化输入输出 非格式化数据读写 随机访问文件 字符串格式化读写 C99的宽字符输入输出函数分布在,不作介绍 3
流(Streams) 在C中,流指任何输入源或输出目的地 ■许多小型程序只从一个流(键盘)输入,并输出到另一 个流(屏幕) 大型程序可能需要多个流 流通常指代存储在不同介质上的文件 流也可以指网络端口或打印机等设备 流的访问通过文件指针file pointer)进行,文件指针的 类型为FILE*类型 FILE*类型定义在中 ■系统已预先定了几个标准的流;也可以声明新的流 FILE *fp1,*fp2;
流(Streams) 在C中,流指任何输入源或输出目的地 许多小型程序只从一个流(键盘)输入,并输出到另一 个流(屏幕) 大型程序可能需要多个流 流通常指代存储在不同介质上的文件 流也可以指网络端口或打印机等设备 流的访问通过文件指针file pointer进行,文件指针的 类型为FILE*类型 FILE*类型定义在中 系统已预先定了几个标准的流;也可以声明新的流: FILE *fp1, *fp2; 4
标准流及重定向(Redirection) 提供了三个标准流,可直接使用: File Pointer Stream Default Meaning stdin Standard input Keyboard stdout Standard output Screen stderr Standard error Screen 1上述三个流可直接使用,不用事先打开,用完也无需 关闭 默认情况下,程序以键盘作为标准输入,以屏幕作为 标准输出,但可以通过重定向技术改变默认行为: 输入重定向:demoout.dat,在命令提示符下输入该命令 后,printf将打印到out.dat而不是屏幕
标准流及重定向(Redirection) 提供了三个标准流,可直接使用: File Pointer Stream Default Meaning stdin Standard input Keyboard stdout Standard output Screen stderr Standard error Screen 上述三个流可直接使用,不用事先打开,用完也无需 关闭 默认情况下,程序以键盘作为标准输入,以屏幕作为 标准输出,但可以通过重定向技术改变默认行为: 输入重定向: demo out.dat,在命令提示符下输入该命令 后,printf将打印到out.dat而不是屏幕 5
重定向操作 ■输入重定向和输出重定向也可以组合使用: demo in.dat out.dat ■重定向符号的顺序没有规定,下面两种均可: demo in.dat out.dat demo >out.dat <in.dat ■ 将错误信息写入stderr的好处是:即使stdouti已被重定 向,错误信息也能显示在屏幕上 6
重定向操作 输入重定向和输出重定向也可以组合使用: demo out.dat ''重定向符号的顺序没有规定,下面两种均可: demo out.dat demo >out.dat <in.dat 将错误信息写入stderr的好处是:即使stdout已被重定 向,错误信息也能显示在屏幕上 6
文本文件s二进制文件 支持两种类型的文件:text文件和 binary.文件 文本文件的内容被解释为字符,比如c语言的 源程序文件就是文本文件 ■ 二进制文件的内容一般不解释为字符,但某些 位的组合仍然可以表达有意义的信息,典型的 可执行文件就是二进制文件,类似于图像、视 频等文件一般也是二进制文件
文本文件 vs 二进制文件 支持两种类型的文件: text文件和 binary文件 文本文件的内容被解释为字符,比如C语言的 源程序文件就是文本文件 二进制文件的内容一般不解释为字符,但某些 位的组合仍然可以表达有意义的信息,典型的 可执行文件就是二进制文件,类似于图像、视 频等文件一般也是二进制文件 7
文本文件的特点 文本文件有两类特殊字符是二进制文件不需要关注的 文本文件一般分割为多个行,每行以特殊的字符表示 换行 Windows:回车(\x0d')后面跟着换行(\x0a) UNIX和新版Mac OS:换行符 老版本Mac OS:回车符 文件结束标记 Nindows:文件结束标记为\x1a'(ctrl-Z),但不是必需的 %Uniⅸ以及其它系统没有文件结束标记 ■二进制文件不对换行符和文件结束标记特殊对待
文本文件的特点 文本文件有两类特殊字符是二进制文件不需要关注的 文本文件一般分割为多个行,每行以特殊的字符表示 换行 Windows: 回车('\x0d')后面跟着换行('\x0a') UNIX和新版Mac OS: 换行符 老版本Mac OS: 回车符 文件结束标记 Windows: 文件结束标记为'\x1a' (Ctrl-Z),但不是必需的 Unix以及其它系统没有文件结束标记 二进制文件不对换行符和文件结束标记特殊对待 8
文本文件和二进制文件存储的区别 存储信息到文件中,既可以选择文本格式也可 以选择二进制格式 ■存储数字32767为文本格式: 00110011 00110010 00110111 00110110 00110111 3 2 17 ′6 17 存储数字32767为二进制格式: 01111111 11111111 ■二进制格式存储数字一般可节约空间 9
文本文件和二进制文件存储的区别 存储信息到文件中,既可以选择文本格式也可 以选择二进制格式 存储数字32767为文本格式: 存储数字32767为二进制格式: 二进制格式存储数字一般可节约空间 9
文件格式的注意事项 编程访问文件时需考虑文件是文本格式还是二 进制格式 ■ 文件拷贝时以二进制格式拷贝更安全,否则二 进制格式中很可能包含空字符、文件结束符等 ,以文本模式处理碰到空字符、文件结束符会 结束操作 如果不能确定文件格式,以二进制格式访问更 安全 10
文件格式的注意事项 编程访问文件时需考虑文件是文本格式还是二 进制格式 文件拷贝时以二进制格式拷贝更安全,否则二 进制格式中很可能包含空字符、文件结束符等 ,以文本模式处理碰到空字符、文件结束符会 结束操作 如果不能确定文件格式,以二进制格式访问更 安全 10
文件操作 重定向虽然简单,但限制很多 在程序内部,并不知道已被重定向,对重定向的文 件也无法在程序内部控制 必如果需要同时从多个文件读或者写,重定向不可行 ■提供了很多文件操作函数供选用 11
文件操作 重定向虽然简单,但限制很多 在程序内部,并不知道已被重定向,对重定向的文 件也无法在程序内部控制 如果需要同时从多个文件读或者写,重定向不可行 提供了很多文件操作函数供选用 11