当前位置: 首页 > news >正文

设计 网站 源码零售户订烟电商网站

设计 网站 源码,零售户订烟电商网站,郑州现在可以正常出入吗,中国互联网排名前十名初识文件 之前我们认识到当我们进行创建出一个空文件在磁盘上也是占用一部分空间的#xff0c;因为文件的组成是由文件内容和文件属性共同构成。 文件内容属性#xff0c;那我们对文件进行操作无外乎就是对内容和属性两个方面进行操作。 文件在磁盘上进行存储#xff0c;…初识文件 之前我们认识到当我们进行创建出一个空文件在磁盘上也是占用一部分空间的因为文件的组成是由文件内容和文件属性共同构成。 文件内容属性那我们对文件进行操作无外乎就是对内容和属性两个方面进行操作。 文件在磁盘上进行存储那我们进行访问文件是如何进行访问的呢 其实我们用户层进行访问文件的一般步骤代码→exe可执行程序→运行→访问文件在这个过程中其实真正进行与访问文件进行直接关联的是进程。我们用户层要想进行文件的访问必须通过操作系统进行操作系统为我们提供访问文件的函数接口我们通过函数结构进行对文件的访问。 语言层面的访问文件的操作和操作系统中访问文件的操作的联系 语言层面不管是C/C/python/java进行访问文件的函数底层都是通过封装操作系统的函数接口进行实现的。 语言为什么要对操作系统中的函数进行封装 操作系统中与文件有关系的函数都比较复杂语言层面通过对操作系统中与文件有关系的函数进行封装减少了我们进行访问文件的成本并可以实现代码的跨平台性库平台性的实现主要就是通过条件编译进行实现的通过写三套一般通过继承进行实现代码在每个操作系统下选择适配的代码方式进行运行。 既然语言层面已经将操作系统的文件接口进行封装好了我们为什么还需要在进行学习操作系统的文件接口 贴近底层的接口可以直接和文件进行交互性能比较高 为什么说Linux下一切皆文件 感性的认识 我们在感性层次方面通常认为可读可写的称为文件这里的可读可写是站在文件本身的角度文件可以读取我们通过键盘输入的数据文件也能将从键盘中读取的数据进行写到显示器上。那么对于硬件键盘而言键盘只有读取的功能写入功能为空同理对于显示器只有写入的能力读取的能力为空所以说键盘和显示器这种硬件也是文件。 对文件进行下定义 站在系统层面的角度能够进行input读取和output进行写入的设备叫做文件。也就是说绝大多数的硬件设备也是文件例如键盘、显示器、网卡、声卡、显卡、磁盘在广义层面上都是称为文件。 C语言封装系统的接口 fopen-----打开文件函数 函数返回值 返回一个 FILE * 类型的指针用于指向打开的文件。如果文件成功打开返回一个指向文件的指针如果打开文件失败则返回 NULL。 函数参数 pathfopen函数进行打开文件的路径可以是绝对路径也可以是相对路径 modefopen函数进行打开文件的方式具体有以下几种 r以只读的方式进行打开文件流信息位于文件的开头进行只读方式文件必须存在。r以读写的方式进行打开文件其他于r方式相同。w以写入方式进行打开文件如果文件存在删除文件内容文件不存在进行创建文件。w以读写方式进行打开文件其他和w方式相同。a以追加的方式进行打开文件如果文件不存在则创建文件如果文件存在则在文件末尾进行追加新内容。a以读写方式进行打开文件其他和a方式相同。 fwrite、fread r方式进行打开文件 w方式进行打开文件 a方式进行打开文件 语言和系统层面的文件接口的来联系 语言层面kan的文件接口其实就是对于系统接口的封装语言层面的简单实现实际上都是对系统接口的封装这个封装是通常是比较复杂的。 系统的文件接口 查看系统的文件接口 以打开文件的接口为例 man 2 open 打开文件open 参数解析 pathname指定打开文件的路径 flag定义打开文件的方式和选项 常用选项 O_RDONLY只读方式打开文件。O_WRONLY只写方式打开文件。O_RDWR读写方式打开文件。O_CREAT如果文件不存在则创建该文件。O_TRUNC如果文件已经存在并且打开方式是写入O_WRONLY则将文件长度截断为零。O_APPEND以追加方式打开文件 定义文件打开方式的选项是如何通过int 类型进行传参的呢 常用选项都是大写字母进行定义我们见过的都是宏定义这些选项其实也是宏定义通过位图的方式向整形进行映射。 fopen和open的联系 fopen通过 r 的方式进行打开文件对应的系统的选项是 O_RDONLYfopen通过 w 的方式进行打开文件对应系统的选项为 O_WRONLYO_CREATO_TRUNCfopen通过a的方式进行打开文件对应系统中的选项为O_WRONLYO_CREATO_APPEND。语言层面看似非常简单的操作实际上都是对底层的持续封装。 返回值解析 这里的返回值类型和语言层面的返回值类型不同这里是通过整形进行返回其实这只是记录文件的方式C语言中选用了结构体指针的方式而系统相当于选用了通过数字的方式进行记录打开文件的方式这个数字称为文件描述符。FILE* 指向的结构体中肯定包含文件描述符。 关闭文件close 写入文件write 参数解析 fd需要进行写入的已经打开的文件描述符 buf指向要写入数据的缓冲区的指针。buf 应包含要写入的内容。 count需要写入的数据的字节数。 通过umask进行修改文件的权限 文件描述符 文件描述符的初识 我们进行打开文件时文件描述符为什么是从3开始进行连续0、1、2这三个文件描述符为什么会消失 其实我们在进行打开使用系统时012这三个文件描述符就已经打开了分别是标准输入0标准输出1)和标准错误2。 文件描述符的理解 当时我们进行学习进程的时候进行进程的管理时就是通过进程控制块task_struck进行管理task_struct中还存在一个指向files_struct的结构体指针files_struct结构体中还存在文件指针数组文件指针数组中又存放了每个文件的结构体信息。 进程管理 进程通过fopen进行进行调用系统接口openopen通过文件描述符fd进行找到FILE结构体然后通过FILE结构体中的FILE然后进行文件管理 文件管理 fwrite进行调用系统接口write进行读取fd进行执行内部操作找到task_struct结构体然后通过task_struct中的指针找到files_struct结构体然后从files_struct结构体中找到fd_array进而根据fd_array[ fd ]找到文件的file结构体内存文件就被找到了从而对文件进行操作。 进程要想进行访问文件首先需要先进行打开文件一个进程可以打开多个文件所以说进程文件1n所以操作系统要进行管理文件维管理文件的方式---先描述再组织。 输出重定向 现象 通过关闭流输出的文件操作符通过系统接口open打开log.txt文件然后对log.txt进行写入可以发现本来应该打印到屏幕上的文件操作符fd的值并没有进行打印字符串的内容被写到了log.txt文件中。 本质 操作系统默认打开标准输入、标准输出、标准错误通过close进行关闭标准输出然后fd_array[1]nullptr通过open打开新文件fd_array[1]存的就是新文件的struct file的地址。 注fd的分配规则最小的没有被占用的文件操作符 重定向的本质就是操作系统更改fd的指向。 通过手动去关闭fd_array数组中文件文件操作符的指向是非常挫的我们可以通过dup2函数进行 对于参数的理解 通过dup函数进行重定向本质就是更改fd_array数组中文件操作符的索引及对应的内核对象的关联信息指向将老的文件操作符的指向换成新的将数组中fd_array中原来文件操作符索引及对应的内核对象的关联信息指向新文件。oldfd改成新的文件指向。 关于向显示器进行重定向 虽然标准输出和标准错误都是在显示器上进行打印,但是这两个显示器文件并非是一个文件,而是两个不同的文件,一般我们将可能含有错误的信息通过stderr或者cerr进行打印,一般的文本内容通过stdout和cout进行打印.将文件内容进行重定向到文件中,其实是将1号文件描述符所在的数组位置的指号针进行重新指向到新文件,2文件名是将2号文件描述符所在的数组位置的指号针进行重新指向特定文件.可以通过这种方式进行错误日志的填写 一切皆文件的理念 在软件层面我们可以将所有的所有的软件都看成文件当磁盘文件被加载到内存中就变成了进程但是一些硬件在Linux下也是文件这就比较有说法了其实就是C中的面向对象的思想但是Linux操作系统是用C语言写的面向对象都是通过类实现的C语言中没有类只能通过结构体进行实现结构体中可以包含成员属性但是不能直接进行包含成员方法成员方法的实现是通过函数指针进行实现的通过结构体中的成员属性和成员方法进行实现硬件的功能底层不同的硬件一定对应不同的操作方法对于外设每个外设的核心就是访问函数都可以是write read IO有关所有的设备都可以有自己的read和write但是write和read的代码实现一定是不一样的 缓冲区 概念 缓冲区故名思意就是一段空间这个空间是谁提供的呢是用户操作系统C语言 作用及意义 用户进行写入的数据先在缓冲区中进行存放当满足缓冲区的刷新策略时数据才被打印到指定的文件减少IO的次数提高整机的效率提高用户的响应速度。 缓冲区的刷新策略 行刷新满刷新立即刷新特殊情况 用户强制刷新进程退出 在语言层面C语言和系统层面执行打印带屏幕上时能够将内容进行打印当将内容进行重定向到文件中时语言层面的内容并没有在文件中进行显现通过fflush进行刷新之后即可在文件中进行显现 缓冲区的认识 对于所有的外设来说更加的都倾向于全缓冲缓冲区满了才会进行刷新目的是减少IO的次数在进行IO的过程中最耗时间的不是数据量的大小而是进行IO的次数。 对于显示器来说就是行缓冲设备之所以是行缓存设备是需要进行照顾用户的体验极端条件下是可以进行自定义规则的。但是磁盘文件就是全缓冲--主要是处于效率考量。 缓冲的存在位置 现象 通过fork()函数进行创建子进程像显示器中进行打印和向文件中进行打印系统层面未出现任何不同,而语言层面出现了不同通过上面的现象我们可以知道缓冲区其实是C语言层面进行维护的 解释现象 当向显示器进行打印时显示器的刷新策略是行刷新当代码进行到fork时打印的函数都已经执行完了内容也进行打印到了显示器上fork函数不会产生任何影响;但是当向文件中进行打印时此时刷新策略变成了满刷新此时当代码运行到fork时代码全部都在C语言的缓冲区中缓冲区中的代码也是属于父进程此后共享的代码将进行写实拷贝就导致了语言层面的打印呈现双倍的状态 FILE结构体中不仅只包含了文件描述符还包含了缓冲区结构
http://www.dnsts.com.cn/news/15887.html

相关文章:

  • 网站更新提示怎末做qq快速登录入口
  • 网站域名区别公司网站建设需求
  • 门户网站排版微网站是免费的吗
  • 白山建设局网站如何自己设计logo图标
  • 沙洋建设局网站做微网站迅宇科技
  • 百度网盟如何选择网站企业小程序建设公司
  • 网站设计 cdc网站开启速度变慢了
  • 网站建设价格裙微信公众号微网站开发类型
  • 建站模板哪里好工信部网站备案信息
  • 微信做单网站有哪些自己建设网站怎么被百度收入
  • 网站被黑了怎么恢复福州建设工程招投标信息网
  • 网站建设云免费中小企业管理软件
  • 有口碑的宁波网站建设策划公司是做什么的
  • 网站哪家做的比较好的网站建设q a
  • 软件下载网站如何履行安全管理佛山设计公司排名
  • 网站常用配色义乌网站建设公司价位
  • 做php网站的书东莞网页设计与建设
  • 公司网站建设费wordpress自动采集影视
  • 专业的网站建设找聚爱品牌营销网站建设
  • 惠州品牌网站建设公司哪里有全球网站建设品牌
  • 做ppt很有创意的网站协会类网站免费模板
  • 安阳宣传片制作公司东莞seo排名公司
  • 江苏城乡住房建设部网站网站建设公司哪家好 尖端磐石网络
  • 建始县城乡建设局网站上海比较好的服装外贸公司
  • 海拉尔网站建设 网站设计广州seo工程师
  • 深圳免费建站温州网站设计
  • 通栏网站为什么网站要友情链接
  • 吉林智能网站建设企业在线培训课程
  • 高端网站制作的公司网站建设技术员分为前端 后端
  • 佛山营销型网站找网络公司做的网站可以出售吗