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

个人做网站有什么坏处芜湖经济开发区网站

个人做网站有什么坏处,芜湖经济开发区网站,wordpress二级分类列表,顶尖网站建设文件IO文件的常识基础IO为什么要学习操作系统的文件操作C语言对于函数接口的使用接口函数介绍如何理解文件文件描述符重定向更新给模拟实现的shell增加重定向功能为什么linux下一切皆文件#xff1f;文件的常识 1.空文件也要在磁盘占据空间 2.文件 内容 属性 3.文件操作 对… 文件IO文件的常识基础IO为什么要学习操作系统的文件操作C语言对于函数接口的使用接口函数介绍如何理解文件文件描述符重定向更新给模拟实现的shell增加重定向功能为什么linux下一切皆文件文件的常识 1.空文件也要在磁盘占据空间 2.文件 内容 属性 3.文件操作 对内容 对属性 4.标定一个文件必须使用文件路径 文件名唯一性 5.如果没有指明对应的文件路径默认是在当前路径进行访问 6.当我们把fopen,fclose,fread,fwrite等接口写完之后代码编译之后形成二进制可执行程序之后但是没运行文件对应的操作有没有被执行呢没有 —— 对文件操作的本质是进程对文件的操作。 7.一个文件如果没被打开可以直接进行文件访问吗不能一个文件要被访问就必须先被打开被打开的时候是用户调用端口操作系统负责操控硬件所以这个操作是用户进程和操作系统共同完成的 8.磁盘的文件不是所有的都被打开是一部分被打开一部分关闭。 总结文件操作的本质是进程和被打开文件之间的关系。 基础IO 为什么要学习操作系统的文件操作 语言中CCjavapythonphp都有文件操作的接口可是每个接口都不一样。 但是文件是在磁盘中磁盘是硬件那么想访问文件就不能绕过操作系统要使用操作系统提供的接口。 但是操作系统的接口是不会变的语言层面的操作文件也是通过对操作系统的这些接口进行封装而已。 所以学习底层操作系统能让我们在以后学习其他语言上手更快。 C语言对于函数接口的使用 w打开只写文件若文件存在则文件长度清为0即该文件内容会消失。若文件不存在则建立该文件。 w打开可读写文件若文件存在则文件长度清为零即该文件内容会消失。若文件不存在则建立该文件。 wb只写方式打开或新建一个二进制文件只允许写数据。 wb读写方式打开或建立一个二进制文件允许读和写。 r打开只读文件该文件必须存在否则报错。 r打开可读写的文件该文件必须存在否则报错。 rb读写方式打开一个二进制文件只允许读写数据。 a以附加的方式打开只写文件。 a以附加方式打开可读写的文件。 ab读写打开一个二进制文件允许读或在文件末追加数据。加入b字符用来告诉函数库打开的文件为二进制文件而非纯文字文件。 接口函数介绍 首先注意一个细节文件的起始掩码是666创建出文件是这样得出权限的666 ~numask。 先说第一个参数是包含路径的文件名没有默认就是当前路径第二个参数是你要进行什么操作是一个C传标记为,靠比特位得到信息的参数第三个参数是输入权限起始文件的权限就是0666.。 正确返回值是文件描述符其实就是一个小整数下面会说明由来错误是-1。 注意在使用open时如果不存在该文件一定要注意第二个参数要传什么参数第三个参数是必须要传的不然就是错误文件。 这个函数可以传三个参数的原因就是为了处理不存在的文件。 这里先说一下C传标记位。 假如有八个比特位每个比特位变成1其他均为0那么就有8种 那么到时候就可以这样用 #includestdio.h #define ONE (1 0) #define TWO (1 1) #define FOUR (1 2) #define EIGHT (1 3) void print(int x) {if(xONE)printf(ONE\n);if(xTWO)printf(TWO\n);if(xFOUR)printf(FOUR\n);if(xEIGHT)printf(EIGHT\n); } int main() {print(ONE);//打印ONEprint(ONE|TWO);//打印ONE,TWOprint(ONE|TWO|FOUR)//打印ONE,TWO,FOURprint(ONE|TWO|FOUR|EIGHT)//打印ONE,TWO,FOUR,EIGHTreturn 0; }open函数的第二个参数也是同样的道理 O_RDONLY: 只读打开 O_WRONLY: 只写打开 O_RDWR : 读写打开 这三个常量必须指定一个且只能指定一个 O_CREAT : 若文件不存在则创建它。需要使用mode选项来指明新文件的访问权限 O_APPEND: 追加写 O_TRUNC : 清空文件中的内容 这里就创建了一个文件权限是对应666. 这里注意一下umask设置的是当前进程的跟shell的没关系。 这是系统写入函数 第一参数是你要写入的是文件描述符第二参数是我们要写入缓冲区的位置第三个是你要放进去的大小返回值后面再说。 第二个参数是是void*这是因为文本可以纯文本和二进制读取但是在操作系统看来都是二进制这个分类其实是语言给的分类。 经过上面的举例其实就会发现C语言调用的fopen其实就是在传参给open上面的四个参数而已。 这是从文件中读取内容的函数. 第一个参数是文件描述符第二个参数是从特定文件读取内容到缓冲区第三个参数是读取多少个实际上输入的500如果缓冲区只有50那么它只会读取50。 第二个参数也是void*也是没有类型概念的。 如何理解文件 文件操作的本质进程和被打开文件的关系。 首先进程是可以打开多个文件的系统中一定会有大量被打开的文件那么如何管理这些文件呢其实就像管理进程一样先描述再组织先来看这一段代码 这里发现文件是有顺序的那么为什么不像数组一样从0开始呢 因为有三个标准输出流的存在 stdin ——键盘 stdout ——显示器 stderr ——显示器 这三个就是排在前面顺序的 并且C语言的FILE指针是一个结构体因为在系统层面只认识文件描述符所以里面必定有一个字段是文件描述符。 所以是从0开始的但是前三个被占用了。 那么数字为什么是从0开始的呢 磁盘中被进程打开到内存中然后是通过struct file这个类型来描述放到内存中然后进程的PCB中里面有一个struct file_struct *files这个指针指向一个struct file*array[]的数组来管理这些文件。 总结文件描述的本质就是数组的下标 文件描述符 重定向 上面我们知道了012都被占用了那么是否能够将我们的文件fd变成012呢 这样是可以的也就是说fd的分配规则是从0开始一个新文件要打开的时候会先去扫面当前进程中的文件表找到一个最小的没有被使用的文件描述符。 这里我们把1关闭试试 什么都没有打印出来这是因为1是标准输入但是就算那一行关闭了最后也打开了为什么没有打印出来呢 这是因为1的位置里面已经是log.txt文件的地址了所以到最后都没有打印出来。 那么也就是说只要是让输入的输入到stdout中是不是就可以打印出来结果了呢 这里依然什么都没有这时因为stdout其实就是文件表中1的位置但是这里1的位置已经换成了log.txt那么是不是说明会将我们要打印到屏幕上的内容变成打印到log.txt文件的内容呢 这里什么都没有但是确实是这样的只不过是缓冲区的问题这里我们强制刷新一下 本来应该往显示器里打印的内容却打印到了文件里这个特性就叫做重定向。 输出重定向 追加重定向 输入重定向 重定向的本质就是上层fd不变在内核中更改fd对应的struct file*的地址。 但是像刚才举例关闭对应的文件然后再进行写入这种重定向的方式太搓有一个函数是重定向用的 看dup2两个参数就是文件表的下标也就是fd这个函数是把文件表内的两个内容拷贝。 注意拷贝是覆盖也就是说最后只能由一个内容 第一个参数你你要写的内容第二个参数是你要写的位置。 这里fd就是3了因为是将fd的内容拷贝到1中所以012的位置还是有内容的fd分到的还是3。 同时我们想在屏幕上打印也不可以了因为1也指向了fd指向的文件。 如果想要追加内容那么打开文件的时候第二个参数记的变换。 更新给模拟实现的shell增加重定向功能 重定向是让fd中的内容进行改变所以在执行命令之前要先分割命令的时候分成两个部分从“,”“,”“中开始分割。 前面的还是按照原来的程序执行后面的去处理重定向内容那么怎么进行分割呢我们可以将.”“,”“,”变成\0。 重定向先设置四个宏分别代表目前没有重定向,,. 在设置两个全局变量一个是说明什么类型的重定向另一个是重定向的文件是哪个。 这个宏是跳过字符串空格的意思。 这个就是函数就是分割了命令串是否是重定向怎么重定向文件是哪一个。 然后就是进行重定向了首先要清楚因为命令都是通过子进程去完成的所以重定向也是通过子进程去完成的。 那么为什么子进程操作不影响父进程的呢 首先进程拥有独立性文件表也会拷贝父进程一份但是文件是不会被拷贝的也就是说子进程重定向是更改子进程的文件表并不会影响父进程的。 并且程序替换的时候也不会影响重定向打开的文件因为程序替换替换的是程序的代码而内存中的PCB文件表文件都属于内核数据结构就像进程的替换不会影响PCB内容的变化也不会影响pidppid一样。 这样就完成了。 为什么linux下一切皆文件 比如一些硬件他们有自己的内核数据结构他们每个都有自己的读写方法键盘没有写功能那就指向空每种硬件读写方式都是不同的。 那么既然是不同的数据结构怎么进行管理呢 这时候就会定义一个结构体里面记录硬件的数据也能调用对应硬件的读写接口。 file是链接起来的先描述再组织。 所以操作系统看来只需要调用file就可以了所以说linux下皆文件。 那么上面说到重定向的时候为什么我们子进程退出时关闭了一个文件按理来说父进程也会关闭文件但是并没有因为有一个叫做引用计数 在结构体中有一个专门计数有多少个指针指向这个位置如果这个数为0文件就会关闭如果不为0即便是子进程关闭文件也就等于这个数减一而已。 因为用户要关闭文件和打开文件只是我们去告诉操作系统我们要这么去做而已剩下的就让操作系统实现具体内容。
http://www.w-s-a.com/news/314144/

相关文章:

  • 电子商务网站建设与规划总结外链查询网站
  • 西安网站品牌建设做网站需要的东西
  • 网站外围网站怎么做移动端网站开发项目
  • 做网站只做前端可以用吗知更鸟免费 wordpress
  • html5 微信网站主流开发技术标准网站搭建费用
  • 加强统计局网站的建设和管理广州微信网站建设价格
  • 华宁网站建设设计公司 网站
  • 简历网站免费怎么查在哪个网站做的备案
  • 响应式网站 价格网站用哪些系统做的比较好用
  • 高端网站案例360做的网站
  • 瑞安地区建设网站公众号开发者工具是干嘛的
  • 请解释网站开发的主要流程.wordpress主体上传
  • 网站方案组成要素饰品公司网站建设方案
  • 网站改版被降权赣州景文网络科技有限公司
  • 吉林省网站建设推广图片模版
  • 如何做网站热力图佛山 网站关键词优化
  • 个人网站建设论文中期报告申报网站建设理由 模板
  • 岫岩做网站软件开发和app开发的区别
  • 邯郸质量一站式服务平台上线如何做国外销售网站
  • 内蒙古工程建设协会网站sem优化策略
  • Linux网站建设总结建设电子商务平台
  • 公司网站背景图片课程网站如何建设
  • 用js做简单的网站页面互联网技术对人力资源管理的影响有哪些
  • 银川做网站贵德县wap网站建设公司
  • 深圳网站建设zvge山西省煤炭基本建设局网站
  • 佛山网页网站设计线上怎么做推广和宣传
  • 多个域名绑定同一个网站案例
  • 建设网站都需要准备什么代理加盟微信网站建设
  • 网站备案没有了wordpress 添加按钮
  • 湖南建设银行宣传部网站福田蒙派克空调滤芯安装位置图