冯诺依曼体系:
计算机架构 —— 五大单元四个设备:输入输出单元,存储器(指的是内存不是硬盘),运算器,控制器。
运算器和控制器集成在CPU中。
系统总线:连接CPU和内存的线。
I/O总线,内存和输入输出单元间的线。
速度差异导致CPU不能直接访问外设。只有内存和CPU直接打交道,输入输出都是访问内存。
exe文件存放在内存上,程序运行起来的时候先把程序加载到内存的原因就是因为冯诺依曼体系。
输入输出设备不局限于键盘鼠标麦克风等,网卡硬盘等也是外设。
出了CPU和内存之外都可以认为是输入输出设备,具体是输入设备还是输出设备视场景而定。
从外设到内存的过程就叫做I/O
所以输入输出是站在内存的角度来讲。
文件操作(文件存放在硬盘上,需要I/O)
读:把文件从硬盘加载到内存
写:把数据从内存写到硬盘。
此时输入设备是硬盘,也可以具体为硬盘上的文件。
错误报告函数:perror("Error is"); 出现错误时在Error后面加: 再加空格,然后打印错误信息
流:可以简单地理解为从内存输入输出数据
分为二进制流和文本流。
程序运行之后默认打开三个流,stdin,stdout,stderr,都是FILE *类型。
文件:
FILE *,FILE是一个结构,定义在标C头文件中。与硬盘上的文件完全不同,同时打开多个流,每个流都对应一个FILE.
带路径的文件名,打开文件的方式(r,txt,read r+,readandwrite;w,write)
写的时候会将原文本文件清0;w+即读又写,文件不存在时创建
a,appending 写,从末尾写,不清空文件原内容。也成为追加方式
a+,即读又追加
b,以二进制形式打开
t,txt,以文本方式打开
scanf,printf之类能接收和打印数据,这项工作其实是由stdin stdout完成。
在Linux中一切皆文件,硬盘网卡键盘都可以抽象为文件。
一般情况下stdout ,stderr对应的设备是显示器,stdin对应的设备是键盘鼠标。
缓冲区:内存当中一个内存区域
两个小程序,可以发现缓冲区是按行刷新的。
EOF,文件结构表示,但只能用用来表示文本类文件的结尾,其实就是-1;
字符输入函数,getchar ,标准输入流
字符输出函数,putchar ,标准输出流
字符输入函数,fget,getc(FILE *stream),所有输入流
字符输出函数,fput,putc(char charater,FILE *stream),所有输入流
文本行输入函数,fgetsm,gets 所有输入流
文本上输出函数,fputs,puts 所有输出流
格式化输入函数,scanf 标准输入流
格式化输出函数,print 标注输出流
char *fgets(const * str,int num,FILE *stream);
int fputs(const char *str,FILE *stream);
二进制I/O
fread(void *str,size_t,size_t count,FILE * stream)
fwrite(const void *str,size_t size,size_t count,FILE * stream)
文件的写入位置:
rewind:将笔尖移动到最开始
void rewind(FILE *stream);
fseek:将笔尖移动到任何位置
int feek(FILE *stream,long off set ,int whence);
ftell:告诉你当前外置(大小)
long ftell(FILE *stream);
whence:
SEEK_SET
SEEK_CUR
SEEK_END
计算机架构 —— 五大单元四个设备:输入输出单元,存储器(指的是内存不是硬盘),运算器,控制器。
运算器和控制器集成在CPU中。
系统总线:连接CPU和内存的线。
I/O总线,内存和输入输出单元间的线。
速度差异导致CPU不能直接访问外设。只有内存和CPU直接打交道,输入输出都是访问内存。
exe文件存放在内存上,程序运行起来的时候先把程序加载到内存的原因就是因为冯诺依曼体系。
输入输出设备不局限于键盘鼠标麦克风等,网卡硬盘等也是外设。
出了CPU和内存之外都可以认为是输入输出设备,具体是输入设备还是输出设备视场景而定。
从外设到内存的过程就叫做I/O
所以输入输出是站在内存的角度来讲。
文件操作(文件存放在硬盘上,需要I/O)
读:把文件从硬盘加载到内存
写:把数据从内存写到硬盘。
此时输入设备是硬盘,也可以具体为硬盘上的文件。
错误报告函数:perror("Error is"); 出现错误时在Error后面加: 再加空格,然后打印错误信息
流:可以简单地理解为从内存输入输出数据
分为二进制流和文本流。
程序运行之后默认打开三个流,stdin,stdout,stderr,都是FILE *类型。
文件:
FILE *,FILE是一个结构,定义在标C头文件中。与硬盘上的文件完全不同,同时打开多个流,每个流都对应一个FILE.
带路径的文件名,打开文件的方式(r,txt,read r+,readandwrite;w,write)
写的时候会将原文本文件清0;w+即读又写,文件不存在时创建
a,appending 写,从末尾写,不清空文件原内容。也成为追加方式
a+,即读又追加
b,以二进制形式打开
t,txt,以文本方式打开
scanf,printf之类能接收和打印数据,这项工作其实是由stdin stdout完成。
在Linux中一切皆文件,硬盘网卡键盘都可以抽象为文件。
一般情况下stdout ,stderr对应的设备是显示器,stdin对应的设备是键盘鼠标。
缓冲区:内存当中一个内存区域
两个小程序,可以发现缓冲区是按行刷新的。
EOF,文件结构表示,但只能用用来表示文本类文件的结尾,其实就是-1;
字符输入函数,getchar ,标准输入流
字符输出函数,putchar ,标准输出流
字符输入函数,fget,getc(FILE *stream),所有输入流
字符输出函数,fput,putc(char charater,FILE *stream),所有输入流
文本行输入函数,fgetsm,gets 所有输入流
文本上输出函数,fputs,puts 所有输出流
格式化输入函数,scanf 标准输入流
格式化输出函数,print 标注输出流
char *fgets(const * str,int num,FILE *stream);
int fputs(const char *str,FILE *stream);
二进制I/O
fread(void *str,size_t,size_t count,FILE * stream)
fwrite(const void *str,size_t size,size_t count,FILE * stream)
文件的写入位置:
rewind:将笔尖移动到最开始
void rewind(FILE *stream);
fseek:将笔尖移动到任何位置
int feek(FILE *stream,long off set ,int whence);
ftell:告诉你当前外置(大小)
long ftell(FILE *stream);
whence:
SEEK_SET
SEEK_CUR
SEEK_END