《APUE》第五章笔记
第五章具体介绍了标准I/O库的各种细节,要是一一列出来,有费精力且可能列不全,故只讲平常多用到的。
标准输入输出是由一大批函数组成的。
要记住,标准输入输出是有缓冲的,就是当缓冲区的数据满了的时候,才会调用read和write函数。而在第三章的时候,是马上调用read和write函数的。
缓冲分为3种,全缓冲,行缓冲和无缓冲。跟终端相关的一般是行缓冲,而标准出错是无缓冲,文件读写的一般都是全缓冲。
改变缓冲模式的有两个函数,setbuf和setvbuf函数。个人感觉setvbuf比较好用,具体实现请翻书。
打开一个流一般是用fopen函数,关闭一个流则是用fclose函数。
读和写流分为几种,有用字符读写的,有用字符串的写的,还有读二进制文件的时候是一块块读写的。
字符读写:读的是getc、fgetc和getchar函数。getchar(void)实际上就等于fgetc(stdin),而getc和fgetc的区别在于第一个能够作为宏,而第二个只能作为函数。这三个函数出错或者读到文件末尾(EOF)都会返回-1,那怎么区别呢?用ferror或者feof函数来区别。对应的就会有输出函数:putc函数、fputc函数和putchar函数。区别跟上述差不多。这么多个函数,一般个人认为只选定一种函数用就行,当然也要看情况。不过一般来说,我读写字符的话就用fgetc和fputc吧。
每次一行I/O:顾名思义,每次读取一行,就是当碰到换行符的时候就会输入或输出。读的是fgets和gets。强烈建议用fgets而不用gets函数,因为gets函数没有指定输入字符的个数,也就是有可能会造成溢出,不安全。fputs和puts就负责输出。两个函数的相同点就是输出一个以NULL结尾的字符串,但是区别就是puts将一个以NULL结尾的字符串写道标准输出,终止符不写出。但是puts然后又将一个换行符写道标准输出。就是如果用fputs函数的话,我们就必须自己处理换行符(如果那个字符串不包括换行符的话)。
二进制I/O的话就是fread和fwrite函数了,没什么好说的,具体请翻书。
定位流的话就用ftell和fseek组合,不过偏移值是长整型(不过应该没关系吧)
格式化输入输出的就是printf和scanf的函数族了。有很多变种函数,但都是格式化的。具体请翻书。
最后,我认为这笔记只是概况,有问题还是要查书,看多了,就自然记住了。
《APUE》第五章笔记的更多相关文章
- 《HALCON数字图像处理》第五章笔记
目录 第五章 图像运算 图像的代数运算 加法运算 图像减法 图像乘法 图像除法 图像逻辑运算(位操作) 图像的几何变换 图像几何变换的一般表达式 仿射变换 投影变换 灰度插值 图像校正 我在Gitee ...
- 《HALCON数字图像处理》第一、二章笔记
目录 第一章 绪论 1.1 图像和图像处理 1.1.1 图像 1.1.2 数字图像 1.1.3 图像处理及其发展过程 1.2 数字图像处理的步骤和方法 1.3 数字图像处理系统的硬件组成 1.4 数字 ...
- 数字图像处理(MATLAB版)学习笔记(2)——第2章 灰度变换与空间滤波
0.小叙闲言 1.本章整体结构 2.书中例子 例2.1 主要是使用函数imadjust,来熟悉一下灰度处理,体验一把 >> imread('myimage.jpg'); >> ...
- 数字图像处理(MATLAB版)学习笔记(1)——第1章 绪言
0.下定决心 当当入手数字图像处理一本,从此开此正式跨入数字图像处理大门.以前虽然多多少少接触过这些东西,也做过一些相关的事情,但感觉都不够系统,也不够专业,从今天开始,一步一步地学习下去,相信会有成 ...
- 【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释
本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换 ...
- 《HALCON数字图像处理》第四章笔记
目录 第四章 HALCON数据结构 HALCON Image图像 图像通道 HALCON Region区域 Region的初步介绍 Region的点与线 Region的行程 Region的区域特征 H ...
- 《HALCON数字图像处理》第三章笔记
目录 第三章 HALCON图像处理基础 HALCON控制语句 HALCON算子 HALCON图像处理入门 HALCON图像读取 HALCON图像显示 图形窗口 图像显示 显示文字 HALCON图像转换 ...
- 《HALCON数字图像处理》第六章笔记
目录 第六章 图像增强 图像增强的概念和分类 灰度变换 直方图处理 图像的平滑 图像的锐化 图像的彩色增强 我在Gitee上建了个仓库,会将学习书本的时候打的一些代码上传上去,笔记中所有代码都在仓库里 ...
- 鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
1.Linux一般将文件可存取的身份分为三个类 别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限.其中 root 的权限最高. 2.在我们 ...
随机推荐
- 通过缓存数据库结果提高PHP性能(转)
众所周知,缓存数据库查询的结果可以显著缩短脚本执行时间,并最大限度地减少数据库服务器上的负载.如果要处理的数据基本上是静态的,则该技术将非常有效.这是因为对远程数据库的许多数据请求最终可以从本地缓存得 ...
- 编写3个不同版本的程序,令其均能输出ia的元素
#include<iostream> #include<vector> #include<string> using namespace std; int main ...
- 安装Laravel遇到You must enable the openssl extension to download files via https问题
刚看了一篇文章说了2014年最火的10个php框架,看到了Laravel,于是便自己试试,孰料刚安装便遇到了一个问题(由于一不小心关掉了cmd,此处无法截图显示),便是如文章标题中所说的那样,goog ...
- W3C XML Schema 教程
转自:http://www.blogjava.net/sham2k/articles/179825.html W3C XML Schema 教程 XML SCHEMA教程 本教程是笔者学习W3C的&l ...
- 包加载失败 未能正确加载包“xxx”...
打开vs2008或者2005如果弹出一个警告对话框 包加载失败 未能正确加载包“xxx” ...... 的字样,就可以用以下方法解决. 在cmd下运行带参数的devenv.exe: "d(盘 ...
- 终于又可以用WLW了.
前面有一段时间没有写博客,然后过完年想继续用WLW的时候,出现问题了. An unexpected error occurred while attempting to detect weblog s ...
- oracle--insert
常规insert语法就不说了,还有些特殊用法 1. insert all into table1(col1,col2) values(v1,v2) into table2(col1,col2) va ...
- [改善Java代码]静态变量一定要先声明后赋值
建议32: 静态变量一定要先声明后赋值 这标题看着让人很纳闷,什么叫做变量一定要先声明后赋值?Java中的变量不都是先声明后使用的吗?难道还能先使用后声明?能不能暂且不说,我们先来看一个例子,代码如下 ...
- nmap命令-----高级用法
探测主机存活常用方式 (1)-sP :进行ping扫描 打印出对ping扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测): 下面去扫描10.0.3.0/24这个网段的的主机 nmap ...
- java下实现调用oracle的存储过程和函数
在Oracle下创建一个test的账户,然后 1.创建表:STOCK_PRICES --创建表格 CREATE TABLE STOCK_PRICES( RIC VARCHAR() PRIMARY KE ...