长春网站建设联系吉网传媒优,软件开发具体是做什么,餐饮网站建设策划书,深圳品牌网站设计格1#xff0c;为什么语言喜欢做封装#xff1f;
我们先知道一个概念#xff0c;显示器叫做字符设备#xff0c;根据ACSLL码来打印数据#xff0c;所以我们从键盘输入的
1234#xff0c;在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数…1为什么语言喜欢做封装
我们先知道一个概念显示器叫做字符设备根据ACSLL码来打印数据所以我们从键盘输入的
1234在显示器看来就是一个一个的字符(1,2,3,4)而不是一千两百三十四: 下图输入字符类型数据 下图输入int类型数据 可以看到要是输入int类型数据到显示器里就会被解析成另外一个字符不能如我们所愿的打印出1234我们需要将输入的int类型值格式化之后才能向显示器输出 所以为什么c中有printf为什么又write还要printf
因为要把内存级别的数据转成字符串再用write打印到显示器如果这些全程交给程序员来做不做封装就会降低程序员的工作效率这就是c/c为什么提供fput等io接口的原因之一。
键盘输入数据也是以字符串的方式输入。
如果直接用read读出来的是字符串如果要的是1234数字而不是字符串就有c封装的scanf(“%d”a);和上面的代码模板类似buffer --- %d --- a;
所以c/c为什么要封装
1为了方便用户操作
因为在操作系统中无文本的概念只有二进制但在语言层就转化成用户可看的
例子就是./text,text.c变成可执行文件的过程就是把代码编译成二进制文件。
2提高语言的可移植性
Linuxwin macos底下都有不同的系统调用接口printf就封装了这三种接口的方法如果是在Linux中用printf他就会调用Linux的接口如果在win中用就调用win接口。
2IO的基本过程
1缓冲区
write本质其实是拷贝函数从用户拷贝到缓冲区 然后再由os自主决定什么时候刷新到外设 外设可以以预加载到缓冲区 每个函数都有自己的操作表里面是函数指针的合集指向文件内核缓冲区。
修改的本质也是先读取在写入。
为什么要存在缓冲区
因为磁盘很慢内存很快缓冲区的存在变相提高了效率。
同时这就是我们平时写东西的时候没按保存缓冲区没把数据刷到磁盘断点的时候我们写的东西就不会被保存而被刷掉。
2重定向
我们在打开文件的时候把0关掉会怎么样
可以看到0号关了之后就会被新创建的表占用
那么把2关掉会怎么样 把2关掉首创建的文件就会把2占用如果把1关了会怎么样 把1关了相当于把显示器输出关了printf不知道哦我们关了一号文件printf就无法把内容输入到显示器根据我们之前的理解这个时候printf应该会向一号文件中写入我们要输出的东西 事实证明文件里什么都没有为什么呢
因为写入的内容在缓冲区中没刷新到文件里程序推出后缓冲区清空写入的内容消失这时候需要用fflush刷新到文件中 可以看到数据已被刷入文件。
那么本来应该向显示器文件写入的却写到了文件中
也就是改变了一号指向显示器的文件改到了指向其他文件这就是重定向了
重定向的过程中上层代码毫不知情他们只认识012.
那么有无接口直接重定向而不是这样关闭打开操作太麻烦了
dup2 如果不理解之前文件描述符等等的学习经历就无法理解为什么dup2里传12就可以重定向
只有学习里才知道里面12的作用才能理解dup2
重定向之后被覆盖的文件如果没有其他指针指向就会自动关闭文件。
覆盖的文件如果没有关掉之前老地址的指向就会有两个指针指向该文件。
操作 什么是追加重定向就是open里面的是O_APPEND,而不是O_TRUNC.
与重定向的方法无不同只是打开方式不同。
什么是输入重定向 将键盘的位置和文件换一下就变成了直接从文件中读内容。
重定向之后很少恢复入宫需要恢复可以在重定向之前存好需要被重定向的文件。