学习笔记2 20191216赵子瑜

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了学习笔记2 20191216赵子瑜脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

20191216赵子瑜

第九章

知识点归纳

本章讨论了I/O库函数;解释了I/O库函数的作用及其相对于系统调用的优势;使用示例程序来说明I/O库函数和系统调用之间的关系,并解释了它们之间的相似性和基本区别;详细介绍了I/O库函数的算法,包括fread, fwrITe和fclose的算法,重点介绍了它们与read, write和close系统调用的交互;介绍了I/O库函数的不同模式,包括字符模式、行模式、结构化记录模式和格式化I/O操作;阐述了文件流缓冲方案,并通过示例程序说明了不同缓冲方案的效果;阐释了有不同参数的函数以及如何使用stdarg宏访问参数

编程项目将本章的原理与编程技相结合,以实现一个类PRintf函数,根据格式字符串格式化打印不同数基的字符、字符串和数字。类printi函数的基础是Linux的putchar),但它的工作原理与库函数print)完全相同。该项目的目的是让读者了解如何实现I/O库函数。

系统调用是文件操作的基础,但它们只支持数据块的读/写。实际上,用户程序可能希望以最适合应用程序的逻辑单元读/写文件,如行、字符、结构化记录等,而系统调用不支持这些逻辑单元。1O库函数是一系列文件操作函数,既方便用户使用,又提高了整体效率

学习笔记2   20191216赵子瑜

 

具体内容:

I/O函数的算法

①    Fread算法:它从文件流中读数据,最多读取count个项,每个项size个字节,如果调用成功返回实际读取到的项个数(小于或等于count),如果不成功或读到文件末尾返回0。返回真实读取的项数,若大于count则意味着产生了错误。另外,产生错误后,文件位置指示器是无法确定的。若其他stream或buffer为空指针,或在unicode模式中写入的字节数奇数,此函数设置errno为eiNVAL以及返回0.

②    fwrit函数是一个常用的文件写函数, 1) buffer是一个指针。对fwrite来说是要写入数据的地址。size是要写入内容的单字节数。ount是要进行写入size字节的数据项的个数。stream为目标文件指针,返回实际写入的数据项个数count。我们在用c语言编写程序时,一般使用标准文件系统,即缓冲文件系统。系统在内存中为每个正在读写的文件开辟“文件缓冲区”,在对文件进行读写时数据都经过缓冲区。要对文件进行读写,系统首先开辟一块内存区来保存文件信息,保存这些信息用的是一个结构体,将这个结构体tyPEdef为FILE类型。我们首先要定义一个指向这个结构体的指针,当程序打开一个文件时,我们获得指向FILE结构的指针,通过这个我们就可以对文件进行操作。

 

 

③        fclose算法:fclose()函数用来关闭当前文件流,fclose()函数功能为:关闭一个流,把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区。(fopen()打开一个流 )头文件#include<stdio.h>函数原型:int fclose(FILE *stream);说明:如果流成功关闭,fclose返回0,否则返回EOF(-1)。 出错的原因包括:传给函数的文件指针不合法,程序运行时遇到中断信号或是操作系统出现故障等等,可通过查看errno值来确定出错原因。

(二)   9.6.1 写文件 - 输入   - R 伪随机数生成器状态,由函数修改   - f 需要写入的文件 - wirte(f, RandomData(R,64)) 9.6.2 更新文件 - 输入   - R 伪随机数生成器状态,由函数修改   - f 需要写入的文件 - s <-- read(f) - assert length(s) = 64 - Reseed(g, s) - write(f, RandomData(R,64))

(三)   伪随机数生成器在任何时候都有一个内部状态。【。。。。密码算法生成伪随机数,并更新内部状态对伪随机数生成器的攻击方式:典型的密码学攻击方法:攻击者尝试从生成器的输出重构内部状态如果攻击者获取了内部状态,就可以计算出所有的输出和后续的所有内部状态。 传统的伪随机生成器一旦被攻破,就不可能恢复安全状态。频繁地向伪随机数生成器获取随机数两次请求间添加的熵总量是有限的  - 获得随机输入的所有可能值,就能恢复除适量熵和内部状态结合之后的新状态 御方法:    - 使用一个熵池来存放包含熵的传入事件。收集足够多的熵混入内部状态

  1. 1.                实现困难:以任何方式估测熵的大小都是困难的,难易程度依赖攻击者掌握的信息
  2. 2.                文件的读写

(1)打开(建立)文件:一个文件必须先打开或建立后才能使用;

(2)进行读、写操作:把内存中的数据传输到相关联的外部设备并作为文件存放的操作叫做写数据;把数据文件中的数据传输到内存中的操作叫做读数据。

(3)关闭文件

  1.  写二进制文件

二进制文件的写操作使用PUT语句。

格式:PUT[#]文件号,[写位置],表达式。

功能:将表达式的内容写入文件中,一次写入的长度等于表达式的长度。

说明:文件号——已打开的二进制文件的文件号;写位置——指定数据要写入文件中的位置(从开头以字节为单位计算),若省略,则紧接上一次写作的位置写入。若尚未读写,则为文件头;表达式——要写入文件中数据。

 

二进制其实和我们一般说的ASCLL中的FF,0F是一样的,只不过二进制符合的不是ASCLL的这套显示或者作用标准,它采用的是计算机CPU的处理标准。比如x41在ASCLL中表示的是A,而到了计算机CPU那里他可能是另一个意思

所以文本可以显示,而二进制却不能,是因为文本文件是通过文本文件查看器去重新给文本文件进行处理然后显示的,并不是我们想当然的“直接打开”就能看见,而二进制进行运行,则是不通过其他软件的,直接丢给CPU的。对于windows的二进制放到linux下能用吗?这一问题我查询了CSDN相关网站,发现其实这是不行的,windows的二进制放到linux下之所以不能运行,并不是二进制本身的问题,而是因为linux里没有windows的库,二进制文件运行的时候缺少必要的库才无法运行。所谓的库,其实就是调用系统资或者本身就是系统资源的一种程序包(比如显示,接受键盘,窗口)。和二进制代码有关的唯一的其实就是CPU,因为不同的CPU处理的二进制的指令是有区别的。

 

学习笔记2   20191216赵子瑜

 

 

学习笔记2   20191216赵子瑜

 

 

 

 

 

问题:makefile执行时怎么告诉make命令如何去编译和运行程序

解答:如果这个工程没有编译过,那么我们的所有C文件都要编译并被链接。如果这个工程的某几个c女件被修改,那么我们只编译被修改的C文件,并链接目标程序。如果这个工程的头文件被改变了,那么我们需要编译引用了这几个头文件的C文件,并键接目标程序。

 

脚本宝典总结

以上是脚本宝典为你收集整理的学习笔记2 20191216赵子瑜全部内容,希望文章能够帮你解决学习笔记2 20191216赵子瑜所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。